Bonjour à tous,
Je cherche à dessiner une case à cocher dans une colonne d'un DBGrid. J'ai suivi ce tutoriel. Je l'avais déjà utilisé par le passé.
Mon DBGrid contient 3 colonnes, il est lié à un DataSource ds_select lui même relié à une requête q_select :
Cette requête me rempli donc les deux premières colonnes de mon DBGrid. Je veux que la troisième comporte donc ma case à cocher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 q_select.Close; q_select.SQL.Clear; q_select.SQL.Add('select distinct colxcol, cdexent from ENTXRES, COLXRES where NUMXENT=NUMXCOL'); q_select.SQL.Add('and CODXENT =:cod'); q_select.SQL.Add('and TOUXENT =:tou'); q_select.SQL.Add('and MARXENT =:mar'); q_select.SQL.Add('and (refxcol is not null) group by cdexent, colxcol'); q_select.ParamByName('cod').AsString := x_cli; q_select.ParamByName('tou').AsString := x_tournee; q_select.ParamByName('mar').AsString := x_transport;
J'ai bien créé ma procédure sur le DrawColumnCell :
Et j'ai mon datamodule avec mon imgList (imgCheck) qui comporte deux images une non cochée et une cochée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 procedure TFS42.DBGrid_SelectDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin // On ne prend en compte que la colonne REGROUPER if sameText(Column.FieldName, 'REGROUPER') then begin { On efface la cellule } DBGrid_select.Canvas.FillRect(Rect); { Cochée ou Pas ?} dmImages.imgCheck.Draw(DBGrid_select.Canvas, Rect.Left + ((Rect.Right - Rect.Left - dmImages.imgCheck.Width) div 2), Rect.Top, Ord(Column.Field.AsString = '0') //au lieu de Ord(monDB.Fields[3].AsString = '0') sinon me coche toutes les cases sur la recherche ); end { si column ne correspond pas à une case à cocher, } { on ne s'occupe pas du dessin de la cellule, on } { transmet donc à DefaultDrawColumnCell } else begin DBGrid_select.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; end;
Mais vu que ma troisième colonne n'est pas liée à ma requête comment dois-je faire pour la remplir avec ma case à cocher vide ?
Je vous met en pièce jointe mon écran affichage. La case à cocher est à mettre dans le tableau à droite troisième colonne.
Merci d'avance
Partager