bonjour,
oui il existe une solution pour sauvegarder la position des colonnes du DBGrid:
1-ajouter à votre Form un CheckListBox(pour sauvegarder par l'ordre les noms et lordre des colonnes dans un fichier).
2-dans la proriété du DBGrid.ColumnMoved écrivez
CheckListBox1.Items.Move(FromIndex,ToIndex);
3-créer une procédure qu'on nommée:"FillColumnsInfo":
1 2 3 4 5 6 7 8 9 10 11 12
| procedure TForm1.FillColumnsInfo(Grid: TDBGrid);
var
c : integer;
idx : integer;
begin
CheckListBox1.Clear;
for c := 0 to DBGrid1.Columns.Count - 1 do
begin
idx := CheckListBox1.Items.AddObject(DbGrid1.Columns[c].Title.Caption, DbGrid1.Columns[c]); //on ajoute les noms des colonnes du DBGrid auCheckListBox1.
CheckListBox1.Checked[idx] := DbGrid1.Columns[c].Visible;
end;
end; |
4-ajouter 2 bouttons;le premier est "SaveColumnsBu" et le second "LoadColumnsBu".
dans l'événement de "SaveColumnsBu" on lui donne
1 2 3 4 5 6 7
| procedure TForm1.SaveColumnsBuClick(Sender: TObject);
var
columnsFile : string;
begin
columnsFile := Format('%s_%s_%s',[self.Name, DBGrid1.DataSource.DataSet.Name, DBGrid1.Name]);
DBGrid1.Columns.SaveToFile(columnsFile);//on sauvagarde l'odre des collones dans un fichiers nommé"Form1_Table1_DBGrid1" pour pouvoir ensuite le charger.
end; |
dans l'événement de "LoadColumnsBu" :
1 2 3 4 5 6 7 8
| procedure TForm1.LoadColumnsBuClick(Sender: TObject);
var
columnsFile : string;
begin
columnsFile := Format('%s_%s_%s',[self.Name, DBGrid1.DataSource.DataSet.Name, DBGrid1.Name]);
DBGrid1.Columns.LoadFromFile(columnsFile);//on charge l'ordre des colonnes
FillColumnsInfo(DBGrid1);
end; |
5-dans l'événement "Oncreate de la form saisis ce code
1 2 3 4 5 6 7 8 9
| procedure TForm1.FormCreate(Sender: TObject);
var
columnsFile : string;
begin
DBGrid1.DataSource.DataSet.Open;//on ouvre la table
columnsFile := Format('%s_%s_%s',[self.Name, DBGrid1.DataSource.DataSet.Name, DBGrid1.Name]);
DBGrid1.Columns.LoadFromFile(columnsFile);//on charger l'order des colonnes du fichier "Form1_Table1_DBGrid1".
FillColumnsInfo(DBGrid1);
end; |
ce code est testé reste à vous de nous le confirmer.bonne chance.
Partager