Bonjour,

je rame sur un truc qui me semble bête.

Je charge le résultat d'une requête dans une table mémoire et je lui construis des index
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
procedure TDatas.MemMatieres(const SetActiveIndex : String='CODEASC');
begin
 FDMatieres.Active:=True;
 FDMatieres.FetchAll;
 FDMemMatieres.Data:=FDMatieres.Data;
 FDMatieres.Active:=False;
 FDMemMatieres.Indexes.Clear;
 FDMemMatieres.AddIndex('CODEASC','CODE','',[]);
 FDMemMatieres.AddIndex('CODEDSC','CODE','',[soDescending]);
 FDMemMatieres.AddIndex('DESCASC','DESIGNATION','',[]);
 FDMemMatieres.AddIndex('DESCDSC','DESIGNATION','',[soDescending]);
 FDMemMatieres.IndexesActive:=True;
 FDMemMatieres.IndexName:=SetActiveIndex;
 FDMemMatieres.Active:=True;
end;
Nom : Capture.PNG
Affichages : 571
Taille : 26,4 Ko
cliquer sur l'entête de colonne permet de changer l'ordre de tri
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
 
procedure TFormMatiere.BtnCodeClick(Sender: TObject);
begin
LiaisonListeMat.Active:=False;
case btnCode.ImageIndex of
  1 : begin
        btnCode.ImageIndex:=0;
        // index ascendant sur code
        Datas.FDMemMatieres.IndexName:='CODEASC';
  end
  else begin
         BtnCode.ImageIndex:=1;
         BtnCode.TextSettings.Font.Style:=[TFontStyle.fsBold];
         btnDesc.TextSettings.Font.Style:=[];
         btnDesc.ImageIndex:=-1;
         // changer index descendant sur code
         Datas.FDMemMatieres.IndexName:='CODEDSC';
       end;
 end;
Datas.FDMemMatieres.First;
LiaisonListeMat.Active:=True;
end;
 
procedure TFormMatiere.btnDescClick(Sender: TObject);
begin
LiaisonListeMat.Active:=False;
case btnDesc.ImageIndex of
  1 : begin
        btnDesc.ImageIndex:=0;
        // index ascendant sur Designation
        Datas.FDMemMatieres.IndexName:='DESCASC';
  end
  else begin
         btnDesc.ImageIndex:=1;
         btnDesc.TextSettings.Font.Style:=[TFontStyle.fsBold];
         btnCode.TextSettings.Font.Style:=[];
         btnCode.ImageIndex:=-1;
         // changer index descendant sur Designation
         Datas.FDMemMatieres.IndexName:='DESCDSC';
       end;
 end;
Datas.FDMemMatieres.First;
LiaisonListeMat.Active:=True;
end;
et cela fonctionne parfaitement.

J'ai voulu ajouter un bouton [Rafraîchir] et c'est là ma galère je ne comprends pas pourquoi cela ne fonctionne pas
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
procedure TFormMatiere.BtnRefreshClick(Sender: TObject);
var tri : String;
begin
ListeMatiere.BeginUpdate; // normalement inutile
LiaisonListeMat.Active:=False;
Datas.FDMemMatieres.IndexesActive:=False; 
Datas.FDMemMatieres.Active:=False;
if BtnCode.ImageIndex=0 then tri:='CODEASC';
if BtnCode.ImageIndex=1 then tri:='CODEDSC';
if BtnDesc.ImageIndex=0 then tri:='DESCASC';
if BtnDesc.ImageIndex=1 then tri:='DESCDSC';
Datas.MemMatieres(tri);
Datas.FDMemMatieres.First;   // normalement inutile
LiaisonListeMat.Active:=True;
ListeMatiere.EndUpdate;        // normalement inutile
end;
la valeur de tri est correcte mais les lignes sont en vrac
j'obtiens ceci en clicquant sur le bouton
Nom : Capture_2.PNG
Affichages : 544
Taille : 7,6 Ko
alors que je devrais avoir ceci
Nom : Capture_3.PNG
Affichages : 544
Taille : 8,0 Ko

Une idée, un truc qui crève les yeux ?