[Delphi] obtenir une liste groupée avec les Livebindings. Suite
par
, 07/04/2018 à 10h38 (2015 Affichages)
La théorie, que vous pouvez lire dans mon premier billet sur le sujet, c'est pas mal mais je vais rajouter à mon article (accessible en lecture toujours via ce premier billet) un exemple de la vie "réelle"
j'ai utilisé les fichiers exemples fournis par Embarcadero (orders.cds et customers.cds) , via des TClientsDatasets pour obtenir cette liste
Qu'en pensez vous ? Oui, la présentation laisse à désirer mais il s'agit surtout d'un banc d'essai !
J'ai également rajouté de la couleur en cas d'impayés (voir l'image, MAKAI SCUBA CLUB a laissé une ardoise ! payé 0.00) car il y en a quelques uns dans le fichier proposé et la recherche en guise de@gbgreg
contrairement à ce que j'avais présenté dans mon tutoriel FMX : Mettre de la couleur dans un ListView, à la lumière de mes nouvelles découvertes j'ai opté pour un code différent en utilisant l'événement LinkListControlToField1FilledListItem plutôt que OnUpdatingObjects
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 procedure TForm15.LinkListControlToField1FilledListItem(Sender: TObject; const AEditor: IBindListEditorItem); // le remplissage d'un item est fini var AnItem : TListViewItem; Montant : String; AListItemBitmap : TListItemImage; AColor : TAlphaColor; begin AnItem:=AEditor.CurrentObject as TListViewItem; if (AnItem.Purpose=TListItemPurpose.Header) then begin // Ajout du Pied de Groupe si ce n'est pas le premier groupe if (AnItem.Index>1) then begin with ListView1.Items.Add do begin Text := Format('Total %s %3.2f',[idBloc,Cumul]); Purpose := TListItemPurpose.Footer; end; // cet item devra être déplacé vers le haut end; idBloc:=AnItem.Text; Cumul:=0; end else begin // Ajout des libellés fixes AListItemTextFixe:=AnItem.Objects.FindObjectT<TListItemText>('Text6'); if Assigned(AListItemTextFixe) then AListItemTextFixe.Text:='Montant Total'; AListItemTextFixe:=AnItem.Objects.FindObjectT<TListItemText>('Text7'); if Assigned(AListItemTextFixe) then AListItemTextFixe.Text:='Payé'; // Gestion de la "colorisation" ------------------------------------------------------------ AListItemBitmap:=AnItem.Objects.FindObjectT<TListItemImage>('Image4'); if assigned(AListItemBitmap) then begin AListItemBitmap.Bitmap:=TBitmap.Create(40,40); if OrdersAmountPaid.AsCurrency<OrdersItemsTotal.asCurrency then AColor:=TAlphacolorRec.Crimson else AColor:=TAlphaColorRec.Null; AListItemBitmap.Bitmap.Clear(AColor); end; // ---------------------------------------------------------------------------------------------- Cumul:=Cumul+Orders.FieldByName('ItemsTotal').AsCurrency; // AnItem.Data['Text2'].AsCurrency; end; end;