Colonne de StringGrid Dans L ordre Aphabetique

Résolu
OlivierM92 Messages postés 7 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 31 mars 2006 - 21 oct. 2004 à 17:32
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 22 oct. 2004 à 15:41
Bonjour,
Je suis en Delphi 4 ( je ne sais pas si ca a de l importance mé bon !!
.
J ai un joli Tableau dans un composant Stringgrid, avec 19 Colonnes et a peu de choses pres 450 Lignes ...
.
Connaissez vous un moyen rapide de ranger les lignes de facon alphabetique , en prenant comme référence les donnees d'un colonne ?

Je pensais a un truc comme CustomSort, mais a priori, ca ne marche que avec les ListView .... (Damned),

Si kelkun a une astce de sioux, Je suis preneur

A+

:big)

1 réponse

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
22 oct. 2004 à 15:41
Hou là là

C'est sûr qu'avec un TListView c'est beaucoup plus facile !

Pour les TStringGrid, j'ai pas mieux que :
1 - Copier les données dans une liste
2 - Trier la liste
3 - Re-remplir le TStringGrid

soit :
type
  TTabString = Array [0..99] of String;  // avec les tableaux dynamiques j'ai un Pb
  PTabString = ^TTabString;
var
  ColonneTri : Integer;  // Colonne de base pour le tri;

// fonction de comparaison
function ListSortCompare(Item1, Item2: Pointer): Integer;
var
  PLigne1, PLigne2 : PTabString;
begin
  Pligne1 := Item1;
  Pligne2 := Item2;
  if PLigne1^[ColonneTri]>Pligne2^[ColonneTri]then result:=1;
  if PLigne1^[ColonneTri]0 then exit;
  ColonneTri := C;
  MyList := TList.Create;
  MyList.Capacity := StringGrid1.RowCount;
  //1-  Copie des lignes non fixes
  for j:= StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    begin
      // Nouveau pointeur
      New(PLigne);
      // remplissage du tableau
      for i:=0 to StringGrid1.ColCount-1 do
        PLigne^[i]:=StringGrid1.Cells[i,j];
      // Ajout à la liste
      MyList.Add(PLigne);
    end;
  // 2 - Tri de la liste 
  MyList.Sort(ListSortCompare);
  // Remplissage du tableau
  for j:= StringGrid1.FixedRows to StringGrid1.RowCount-1 do
    begin
      // Recup ligne
      Pligne := MyList.List[j-StringGrid1.FixedRows];
     // remplissage des colonnes
      for i:=0 to StringGrid1.ColCount-1 do
        begin
          StringGrid1.Cells[i,j] := PLigne^[i];
        end;
      Dispose(PLigne); // libération mémoire ligne
    end;
  // libération Liste
  MyList.Free;
end;


Ca doit marcher !

Ken@vo
____________________
Code, Code, Codec !
3
Rejoignez-nous