Chers tous,
j'ai une application qui affiche une grille de données en lecture seule (le sql est créé dynamiquement par le code, avec des filtres selon les écrans).
Le titre de chaque colonne est déterminé lors de l'exécution selon la langue de l'utilisateur. Certaines colonnes sont cachées.
Dans l'évènement AfterOpen de la requête, j'ai mis:
La méthode GDB->getCaption renvoie un texte dans la langue de l'utilisateur.
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 void __fastcall TFStock::QDictAfterOpen(TDataSet *DataSet) { //Title Grid Captions int i; for (i=0;i<DBGridDict->Columns->Count;i++) DBGridDict->Columns->Items[i]->MinWidth=0; i=0; DBGridDict->Columns->Items[i++]->Width=0; DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_DATE"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_PRODUCT"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_REFERENCE"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_VERSION"); // cacher une colonne DBGridDict->Columns->Items[i]->Width=0; DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_ORIGIN"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_QUANTITY"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_QUANTITY"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_DESTINATION"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_QUANTITY"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_TRIGRAM"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_UNITPRICE"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_CURRENCY"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_UNITPRICEEURO"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_TOTALPRICEEURO"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_REASON"); DBGridDict->Columns->Items[i++]->Title->Caption=GDB->getCaption("CMSG_SUBREASON"); }
Ca fonctionne, mais j'ai néanmoins un souci:
si l'utilisateur permute des colonnes dans la grille au run-time, ca marche sauf que lors d'un refresh (query->Close() puis query->Open()), les libellés et largeurs sont remis par rapport dans l'ordre de la grille et pas du select.
On a donc
* un titre qui ne correspond pas avec le contenu de la colonne
* les libellés ne sont pas permutés,
* ce n'est plus la bonne colonne qui est cachée.
=> Y a-t'il moyen de faire en sorte que
1. la grille conserve l'ordre des colonnes et des libellés lors d'un "refresh" de la requête?
2. la grille conserve la largeur des colonnes lors d'un "refresh" de la requête?
3. je suppose que je ne devrai plus affecter ces libellés(valeurs + longueurs) lors de l'ouverture de la requête. A quel évènement dois-je l'associer dans ce cas.
Merci.
Merci,
Alain
Partager