3 pièce(s) jointe(s)
Grid (FMXGrid) , Table et Multiselection
Bonjour,
Dans mes essais de passage a FMX (version XE4) , je transpose un "simple" programme de sélection d'enregistrements (via case a cocher) et je bute sur la navigation dans la sélection .
1°Constatation quelle galère pour tailler les colonnes au design
Dans un premier temps , j'avais ajouter un champ booléen à la liste de mes champs pour avoir une colonne case à cocher : dans ce cas ci , je dirais pas de soucis , il suffit de naviguer dans la table pour se positionner sur les enregistrements 'sélectionnés'
Puis j'ai voulu faire un essai (dans l'esprit : simplifions , simplifions) en mettant la case a cocher dans une colonne fixe sans champ supplémentaire (après avoir pas mal fouillé dans la doc de TMSFMXGrid)
j'ai là aussi pas mal galérer avec l'option SelectionMode pour finalement avoir une solution simple : sans utiliser le système de sélection de TMS (smNone)
pour les curieux
Code:
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
|
// Ajout de la checkbox dans la colonne fixe
procedure TForm1.FormCreate(Sender: TObject);
begin
Grid.AddCheckBoxColumn(0);
end;
// changement d'état , selection/déselection
procedure TForm1.GridCellCheckBoxClick(Sender: TObject; ACol, ARow: Integer;
Cell: TFmxObject);
begin
Grid.RowSelect[ARow]:=not Grid.RowSelect[ARow];
end;
// Colorisation des lignes selectionnées
procedure TForm1.GridGetCellLayout(Sender: TObject; ACol, ARow: Integer;
ALayout: TTMSFMXGridCellLayout; ACellState: TCellState);
begin
if Grid.RowSelect[Arow]
then begin
ALayout.Fill.Color := Grid.StylesData['SelectedCellLayout.Layout.Fill.Color'].AsUInt64;
end
else begin
ALayout.Fill.Color := Grid.StylesData['NormalCellLayout.Layout.Fill.Color'].AsUInt64;
end;
end; |
J'en arrive à ma question : Maintenant j'ai ma sélection multiple , cela doit être tout simple mais comment je navigue dedans enfin , plus exactement comment je sélectionne l'enregistrement correspondant !?
Dans un DBGrid VCL Classique il y a le GotoBookMark mais avec le FMXStringGrid et les LiveBindings y a pas ou alors je ne sais pas où ?
[Edit] Suite , j'indique la version au cas où XE4
Par hasard , je suis "tombé" sur un autre problème de grille (TMSFMXGrid comme StringGrid)
J'ai voulu faire une lecture de toute ma table , le classique 'First .. While Not EOF ... Next, et là surprise :calim2: au niveau de la grille en première ligne , je retrouve mon dernier enregistrement !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| procedure TForm1.Button1Click(Sender: TObject);
begin
//Grid.BeginUpdate;
ADTable1.DisableControls;
adtable1.First;
while not ADTable1.EOF do
begin
if Adtable1Checked.asBoolean then
showmessage(ADTable1LIBELLE_APPOSE.AsString);
ADTable1.Next;
end;
ADTable1.EnableControls;
//Grid.EndUpdate;
end; |
J'ai bien sur essayé les disablecontrols /EnableControls rien n'y fait
Y a t'il une astuce supplémentaire , un truc ?
voilà les images en illustration
1- au design "normal"
2- à l'ouverture , j'ai fait un First juste après le onCreate
3- apres clic sur le bouton voir code , la "fameuse" boucle