Bonjour,
Est-il possible (simplement) de faire un sort() sur une colonne d'un StringGrid et ensuite de d�placer les lignes selon le r�sultat?
Merci
Bonjour,
Est-il possible (simplement) de faire un sort() sur une colonne d'un StringGrid et ensuite de d�placer les lignes selon le r�sultat?
Merci
Salut,
J'ai cherch� en vain de quoi trier selon une colonne (cf Excel)
Le mieux est donc de repasser par un ListBox (pour �viter de faire toi-m�me le tri) qui admet la propri�t� Sorted.
Tu remplis ton ListBox avec des chaines contenant chaque ligne, ta colonne en question en premier ...
... et apr�s tu reconstruit ta grille !
N.B. Mets le ListBox en Visible = false;
Evidemment, tu peux mettre autre chose que "#" comme s�parateur si ce caract�re te sert ...
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 ListBox1->Items->Clear(); ListBox1->Sorted = false; for (int i = 0 ; i < StringGrid1->RowCount ; i++) { ListBox1->Items->Add(StringGrid1->Cells[2][i] +"#"+StringGrid1->Cells[0][i]+"#" +StringGrid1->Cells[1][i]); } ListBox1->Sorted = true; int a = 0; AnsiString s, t; for (int i = 0 ; i < ListBox1->Items->Count ; i++) { s = ListBox1->Items->Strings[i]+"#"; for (int j = 0 ; j < 3 ; j++) { a = s.Pos("#"); t = s.SubString(1, a-1); s = s.SubString(a+1, s.Length()); if (j == 0) StringGrid1->Cells[2][i] = t; if (j == 1) StringGrid1->Cells[0][i] = t; if (j == 2) StringGrid1->Cells[1][i] = t; } }
J'esp�re que �a ira ...
Mathieu
Merci beaucoup !!
Salut � tous,
Voici un petit bout de code permettant de Trier un StringGrid sans passer par un listbox.
Ce code vous permet de trier un StringGrid, mettez vos propres valeur StringGrid et rajouter des colonnes si vous en avez besoins.
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 void __fastcall TForm1::Trier(void) { int idxd; int idxa; char NoSwap = false; AnsiString SWAP_AR_REF; AnsiString SWAP_DL_DESIGN; AnsiString SWAP_DATE; AnsiString SWAP_QTE; AnsiString SWAP_CLIENT; AnsiString SWAP_VALORISE; AnsiString SWAP_PRIXUNIT; AnsiString SWAP_PRIXTTC; AnsiString SWAP_NUM; AnsiString SWAP_DEPOT; AnsiString SWAP_ORDRE; AnsiString SWAP_OK; for (idxd=1;idxd<StringGrid2->RowCount-1;idxd++) { NoSwap = 1; for (idxa=StringGrid2->RowCount-1;idxa>1;idxa--) { if (StringGrid2->Cells[1][idxa-1] > StringGrid2->Cells[1][idxa]) { // sauve les donnée de l'index inferieur... SWAP_AR_REF = StringGrid2->Cells[1][idxa-1]; SWAP_DL_DESIGN = StringGrid2->Cells[2][idxa-1]; SWAP_DATE = StringGrid2->Cells[3][idxa-1]; SWAP_QTE = StringGrid2->Cells[4][idxa-1]; SWAP_CLIENT = StringGrid2->Cells[5][idxa-1]; SWAP_VALORISE = StringGrid2->Cells[6][idxa-1]; SWAP_PRIXUNIT = StringGrid2->Cells[7][idxa-1]; SWAP_PRIXTTC = StringGrid2->Cells[8][idxa-1]; SWAP_NUM = StringGrid2->Cells[9][idxa-1]; SWAP_DEPOT = StringGrid2->Cells[10][idxa-1]; SWAP_ORDRE = StringGrid2->Cells[11][idxa-1]; SWAP_OK = StringGrid2->Cells[12][idxa-1]; // transfere les données de l'index supperieur->inferieur StringGrid2->Cells[1][idxa-1] = StringGrid2->Cells[1][idxa]; StringGrid2->Cells[2][idxa-1] = StringGrid2->Cells[2][idxa]; StringGrid2->Cells[3][idxa-1] = StringGrid2->Cells[3][idxa]; StringGrid2->Cells[4][idxa-1] = StringGrid2->Cells[4][idxa]; StringGrid2->Cells[5][idxa-1] = StringGrid2->Cells[5][idxa]; StringGrid2->Cells[6][idxa-1] = StringGrid2->Cells[6][idxa]; StringGrid2->Cells[7][idxa-1] = StringGrid2->Cells[7][idxa]; StringGrid2->Cells[8][idxa-1] = StringGrid2->Cells[8][idxa]; StringGrid2->Cells[9][idxa-1] = StringGrid2->Cells[9][idxa]; StringGrid2->Cells[10][idxa-1] = StringGrid2->Cells[10][idxa]; StringGrid2->Cells[11][idxa-1] = StringGrid2->Cells[11][idxa]; StringGrid2->Cells[12][idxa-1] = StringGrid2->Cells[12][idxa]; // restore les donnee sauvée dans l'index supperieur StringGrid2->Cells[1][idxa] = SWAP_AR_REF; StringGrid2->Cells[2][idxa] = SWAP_DL_DESIGN; StringGrid2->Cells[3][idxa] = SWAP_DATE; StringGrid2->Cells[4][idxa] = SWAP_QTE; StringGrid2->Cells[5][idxa] = SWAP_CLIENT; StringGrid2->Cells[6][idxa] = SWAP_VALORISE; StringGrid2->Cells[7][idxa] = SWAP_PRIXUNIT; StringGrid2->Cells[8][idxa] = SWAP_PRIXTTC; StringGrid2->Cells[9][idxa] = SWAP_NUM; StringGrid2->Cells[10][idxa] = SWAP_DEPOT; StringGrid2->Cells[11][idxa] = SWAP_ORDRE; StringGrid2->Cells[12][idxa] = SWAP_OK; NoSwap = 0; } } if (NoSwap == 1) { break; } } }
Bon Code � tous !
Knar
Bonsoir,
Dans mon programme j'ai utilis� un Tlist et ,ca marche tr�s bien.
�a fait d�j� qque temps que mon programme tourne et j'avoue avoir un peu oubli� cette demande d'aide.
Je te remercie de ta r�ponse.
Partager