Colonne de StringGrid Dans L ordre Aphabetique [Résolu]

Messages postés
7
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
31 mars 2006
- - Dernière réponse : cs_Kenavo
Messages postés
759
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)
Afficher la suite 

Votre réponse

1 réponse

Meilleure réponse
Messages postés
759
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
2
3
Merci
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 !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 125 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Kenavo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.