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

OlivierM92 7 Messages postés mardi 12 octobre 2004Date d'inscription 31 mars 2006 Dernière intervention - 21 oct. 2004 à 17:32 - Dernière réponse : cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention
- 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
cs_Kenavo 759 Messages postés vendredi 21 mars 2003Date d'inscription 1 octobre 2009 Dernière intervention - 22 oct. 2004 à 15:41
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 !

Merci cs_Kenavo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes 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.