Bonjour à tous,
J'ai une table contenant une liste de produit avec leur prix achat classé par date, et j'utilise dbgrid pour les afficher et je voudrais créer une ligne séparatrice dans le dbgrid a chaque changement de date.
Bonjour à tous,
J'ai une table contenant une liste de produit avec leur prix achat classé par date, et j'utilise dbgrid pour les afficher et je voudrais créer une ligne séparatrice dans le dbgrid a chaque changement de date.
Bonjour,
le DBGrid classique n'a pas (à ma connaissance) de notion de groupage . Par contre certaines DBGrid dérivées (comme smdbGrid) permettent ce genre de chose très facilement.
Mais encore un fois, sans connaitre la version de Delphi concerné ce conseil peut n'être qu'un coup d'épée dans l'eau !
Sinon, avec une DBGrid standard, il est aussi possible de définir la couleur du fond des lignes à chaque changement de date avec le OnDrawColumnCell.
L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!
C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
Re,
tout à fait d'accord, cependant pour faire la même chose qu'un groupage il faut travailler en amont, c'est à dire sur la source de données par exemple de la manière suivante
dans ce cas de figure il est facile de changer la couleur de fond en testant sur un champ normalement non null
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4SELECT UNEDATE,CHAMP1,CHAMP2,CHAMP3 FROM UNETABLE UNION SELECT DISTINCT UNEDATE,NULL,NULL,NULL FROM UNETABLE // groupage par date
le seul problème restant serait l'ordre (ici Date desc,Champ1 desc .....)
Si avec peu de champs cela semble facile avec une requête complexe, d'un autre côté , dans une DBGrid on ne met généralement pas un grand nombre de colonnes
![]()
Bonjour,
pour l'utilisation du ondrawcolumncell pour changer la couleur j'ai la mêthode
par contre ce que je veut faire c'est séparer un nombre d'enregistrement par un espace(vide) lors du défilement des enregistrements
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 procedure TForm1.dbgDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin If gdSelected In State Then Begin TDBGrid(Sender).canvas.Brush.color := clblue; End Else Begin IF si = true then ///si est une variable TDBGrid(Sender).canvas.Brush.color := clLime Else TDBGrid(Sender).canvas.Brush.color := clWhite; End; TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
salut
dans le ondrawCoLumCell
Pour tracer une trait horizontale
a toi de gerer la condition par ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 (sender as Tdbgrid).Canvas.MoveTo(Rect.Right, Rect.Bottom); (sender as Tdbgrid).Canvas.LineTo(Rect.Left-1, Rect.Bottom); // drawing bottom edge (sender as Tdbgrid).Canvas.Pen.Color :=clBtnHighLight; (sender as Tdbgrid).Canvas.MoveTo(Rect.Right-1, Rect.Bottom +1); (sender as Tdbgrid).Canvas.LineTo(Rect.Left +1, Rect.Bottom +1); // drawing bottom edge (sender as Tdbgrid).Canvas.Pen.Color := clBlack;
Partager