salut
je cherche à faire un tri sur un DBGrid .et sa de façon en appuyant sur une colonne les elements de colonne ce tri .
salut
je cherche à faire un tri sur un DBGrid .et sa de façon en appuyant sur une colonne les elements de colonne ce tri .
Salut
Pour effectuer un tri, il faut que tu travailles sur le DataSet sous-jacent de ton DBGrid.
Avec un TxxxQuery, tu changes l'Order By et tu rafraichis les données.
Pour un TxxxTable (que je n'utilise jamais), jouer sur les index ?
@+ Claudius
pour la premiere soulution : est ce que, sa veut dire que je doit mêtre au temps de Txxxquery qu'il y a de colonnes.
pour la second solution :est ce que vous pouvet me donner une idée sur la methode d'utilisation des index ?
Non, il te suffit de reconstuire ta requête en modifiant l'order by.
Je ne sais pas trop, je n'utilise jamais les TxxxTable. Le plus simple est de travailler avec requêtes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 with TonQuery do begin Close; SQL.Text := 'select * from TaTable order by TaColonne;' Open; end;
@+ Claudius
salut
je verrai bien une petite fonction qui fait ca tout seul
du genre
@+ phil
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 function Numligne(rq : Tquery) : integer; var ligne :integer; begin // determine le numero de ligne result := -1; ligne :=0; repeat inc(ligne); if pos('ORDER BY',UpperCase(rq.SQl.strings[ligne]))<>0 then result := ligne; until (ligne=rq.SQL.count-1) or (result<>-1); end; procedure TData.TriColonne(Column: TColumn); var ligne :integer; rq :Tquery; Ordre :String; begin if column.FieldName='' then exit; if column.Field.DataSet=Nil then exit; rq := TQuery(column.Field.DataSet); if rq.State<>dsBrowse then exit; ordre := column.FieldName; ligne := Numligne(rq); if ligne <> -1 then begin if (pos(ordre,UpperCase(rq.SQl.strings[ligne]))<>0) and (pos('DESC',UpperCase(rq.SQl.strings[ligne]))=0) then begin if (pos(',',Ordre)<>0) then ordre := copy(Ordre,1,pos(',',Ordre)-1) + ' DESC ' + copy(Ordre,pos(',',Ordre),length(ordre)) else ordre := ordre + ' DESC'; rq.SQl.strings[ligne] := 'ORDER BY '+Ordre; end else rq.SQl.strings[ligne] := 'ORDER BY '+Ordre; end else rq.SQL.Add('ORDER BY '+ordre); data.CloseRq(rq); data.OpenRq(rq); end;
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager