AEC1
Messages postés98Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention24 décembre 2012
-
20 oct. 2012 à 22:43
AEC1
Messages postés98Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention24 décembre 2012
-
8 nov. 2012 à 05:43
Bonjour,
voici la procédure suivante qui permet en cliquant dans le titre d'une colonne d'un DBgrid lié avec une table sous SQL qui fonctionne très bien, mais je souhaité faire de même avec un DBgris lié avec une table DB Paradox7, mais voila si quelqu'un pouvais m'adapter cette procédure cela me serais bien utile, car je manipule encore assez mal toutes ces subtilités. Merci d'avance, amitiés...
AEC1
procedure TMain.DBGrid1TitleClick(Column: TColumn);
VAr
Tri_Ch:String;
I:integer;
begin
//vérifier si le tri et descandant ou ascendant
if Tri_dec=True Then
begin
Tri_ch:=' ASC';
Tri_dec:=False;
end
ELSE
begin
TRi_Ch:=' DESC';
Tri_Dec:=True;
end;
Db.Close;
db.SQL.Clear;
db.SQL.Add('Select * FROM DB ORDER BY '+Column.Field.DisplayName+Tri_ch);
db.open;
Statusbar1.Panels.Items[0].Text:='Tri Par '+Column.Field.DisplayName+' '+Tri_Ch;
// coloré tout les titre en Noir
For i:=0 to dbgrid1.Columns.Count-1 Do
dbgrid1.Columns.Items[i].Title.Font.Color:=clblack;
//coloré le tite de Tri En Rouge
dbgrid1.Columns.Items[column.Index].Title.Font.Color:=clred;
end;
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 23 oct. 2012 à 07:54
bonjour,
dans l'exemple ci-dessous, je ne tiens pas compte de l'odre ascending ou descending. Il faut créer les index nécessaires
dans le database desktop.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
s: string;
id: byte;
begin
{ si un index est utilisé }
s := Table1.IndexName;
id := 0;
{ sinon une colonne indexée }
if s = '' then
begin
s := Table1.IndexFieldNames;
id := 1;
end;
try
{ on essaye d'utiliser la colonne comme index. Si la colonne n'est pas indexée,
une exception EDatabaseError est lancée. }
Table1.IndexFieldNames := Column.FieldName;
except
on EX:EDatabaseError do
begin
if Pos('No index for', EX.Message) > 0 then
begin
{ si la colonne n'est pas indexée, on réactive l'index précédent }
if id = 0 then
Table1.IndexName := s
else
Table1.IndexFieldNames := s;
end
else
raise;
end
else
raise;
end;
end;
beckerich
Messages postés302Date d'inscriptionjeudi 29 septembre 2005StatutMembreDernière intervention17 septembre 20132 24 oct. 2012 à 08:59
bonjour,
pour l'ordre asc/desc, tu dois créer 2 index par colonne, l'un ascending, l'autre descending avec des noms du style
NOM_COLONNE_ASC et NOM_COLONNE_DESC.
Ensuite, dans ton code, tu dois gérer une variable indiquant le sens tri en cours et mettre l'index adéquat.
AEC1
Messages postés98Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention24 décembre 2012 23 oct. 2012 à 05:40
Bonjour Luc,
merci de m'avoir répondu. En fait le tri dans le DBgrid je sais le faire, mais je souhaité uniquement pouvoir en cliquant dans le titre d'un champ du DBgrid mettre la liste en ordre croissant ou décroissant. C'est pour cela que la procédure que j'ai trouvé sur le site me semblais convenir.Par contre comme dans celle-ci était utilisais un composant SQL et que pour moi j'utilise un composant TTable j'étais un peut dérouté et je reconnaît pas savoir l'adapté.
Merci encore pour ton aide si tu as une idée à me proposé.
Amitiés...AEC1
Vous n’avez pas trouvé la réponse que vous recherchez ?
AEC1
Messages postés98Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention24 décembre 2012 24 oct. 2012 à 06:10
Bonjour Luc,
Cela fonctionne très bien quand on clique sur les titres de la liste du DBgrid, mais il effectue seulement le classement dans l'ordre croissant pour chaque titres cliquer. Par contre, si on clique une deuxième fois sur le même titre il n'inverse pas l'ordre (décroissant) de la liste et ainsi de suite, ce qui est dommage car c'était le but que je recherche.
Merci quand même de ton aide, voir si l'on peut amélioré cette procédure afin qu'elle puisse réalisée cette fonction bien utile en plus de ce que tu m'a déjà proposé.
Amitiés, AEC1...
AEC1
Messages postés98Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention24 décembre 2012 8 nov. 2012 à 05:43
Bonjour Luc,
excuse ma réponse tardive pour cause de déplacement vacances.
Cela fonctionne très bien et merci encore pour ton aide.
Au plaisir de se recontacté, amitiés.
AEC1