Tri dans une stringgrid

Résolu
manytime Messages postés 23 Date d'inscription mercredi 18 janvier 2006 Statut Membre Dernière intervention 2 avril 2008 - 1 févr. 2006 à 10:07
CaineDev Messages postés 2 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 30 août 2006 - 30 août 2006 à 07:42
salut.
Je souhaite faire un tri par ordre alphabétique sur la première colonne de ma stringgrid. besoin d'aide! Merci à tous.

5 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 févr. 2006 à 23:03
Solution proposée :
1- Pour permettre l'accès à une méthode protégée de la classe TStringGrid, nous déclarons une pseudo classe héritant de TStringGrid :
type
  THackedGrid =   class (TStringGrid);

2- Nous déclarons une méthode (ou une procédure, au choix) :
<CODE>procedure TForm1.SortStringGrid(AGrid: TStringGrid; SortCol: integer);
var
  i, J: integer;
begin
with AGrid do
//contr&#244;ler que la colonne &#224; trier est dans les limites
if (SortCol > FixedCols) and (SortCol < = ColCount) then
for i :=  FixedRows  to  RowCount - 2do
for j : = i + 1to RowCount - 1do
//comparaison non sensible &#224; la casse
if AnsiCompareText(Cells[SortCol, i], Cells[SortCol, j]) > 0then
//permuter les deux lignes
            THackedGrid(Agrid).RowMoved(j, i);
end;


</CODE>Le principe est celui du tri à bulles. Le principal intérêt est l'utilisation de la méthode RowMoved à laquelle nous accédons après avoir transtypé le composant TStringGrid en THackedStringGrid.
A noter aussi que le code ci-dessus ignore les colonnes et les lignes fixes et ne trie que les cellules censées avoir un contenu significatif.

3- L'utilisation devient alors simple :
procedure TForm1.btnSortStringGridClick(Sender: TObject);
begin
  SortStringGrid(StringGrid1, StrToIntDef(Edit1.Text, 1));
end;

Donc, si tu décides de changer de colonne à trier, il suffira de faire varier le deuxième paramètre.

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
TheShAmAn Messages postés 148 Date d'inscription lundi 3 février 2003 Statut Membre Dernière intervention 1 février 2006
1 févr. 2006 à 21:23
Et bien si ton résultat viens d'une requete, tu peux tout simplment rajouter un ORDER BY dans celle ci.

Sinon, je crois qu'il y a une source qui explique comment trier un stringgrid.

Voila Voilou
0
CaineDev Messages postés 2 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 30 août 2006
29 août 2006 à 22:12
Bonjour, je profite du topic, car si je n'ai pas un problème de tri, j'ai un problème de déplacement de ligne.
Malgrè les propriétés goEditing,goRowMoving.misent à true, je n'arrive pas à déplacer les lignes dans la grilles par code (non par la souris).

Et pour simplifier (ironie), RowMoved n'est pas connu dans le composant (D6 Personnel).

Faut-il obligatoirement dérivé d'un TStringGrid pour accéder à cette méthode?

Merci de vos réponses.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 août 2006 à 23:06
Bonjour CaineDev,

En déclarant une classe dérivant de TStringGrid dans l'unité où tu as besoin d'accéder à des méthodes "protected", alors tu peux accéder à ces méthodes. C'est ce que démontre le code que j'ai donné ci-desssus.
C'est une méthode un peu limite par rapport aux bonnes manières de la POO mais ça rend parfois bien service.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CaineDev Messages postés 2 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 30 août 2006
30 août 2006 à 07:42
Merci pour ta rapidité de réponse.

J'avais espoir (maigre) que cette méthode ne soit pas "protected", l'aide n'en faisant pas mention.

Le hic c'est que le composant est créé sur la fiche, donc il faudrait que je dérive la classe et que j'installe le composant.

C'est quand même une sacré limitation du TStringGrid je trouve!

Heureusement que je n'ai pas d'obkets stockés, je vais opter pour une échange des propriétées "text" des lignes.

Ha ce TStringGrid, tout ce qu'il faut faire pour rendre son utilisation ergonomique!

Bonne journée.
0
Rejoignez-nous