DBgrid [Résolu]

Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 décembre 2012
- 20 oct. 2012 à 22:43 - Dernière réponse :
Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 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;
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Dernière intervention
17 septembre 2013
- 21 oct. 2012 à 00:48
3
Merci
bonjour,

si tu utilises un TTable, alors regarde du côté de la propriété IndexFieldNames, cela devrait me mettre sur la voie.

Luc.

Merci beckerich 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de beckerich
Meilleure réponse
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Dernière intervention
17 septembre 2013
- 23 oct. 2012 à 07:54
3
Merci
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;

Merci beckerich 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de beckerich
Meilleure réponse
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Dernière intervention
17 septembre 2013
- 24 oct. 2012 à 08:59
3
Merci
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.

ex :

const
  ASC = 0;
  DESC = 1;
if triEnCours = 0 then
  Table1.IndexName := Column.Fieldname + '_ASC'
else
  Table1.IndexName := Column.FieldName + '_DESC';


ou encore

const
  ORDRE : array[0..1] of string = ('_ASC','_DESC');

Table1.IndexName := Column.FieldName + ORDRE[triEnCours];


Salutations,
Luc

Merci beckerich 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de beckerich
Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 décembre 2012
- 23 oct. 2012 à 05:40
0
Merci
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
Commenter la réponse de AEC1
Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 décembre 2012
- 23 oct. 2012 à 20:44
0
Merci
Bonsoir Luc,
encore merci pour ton aide, je vais essayer ce que tu me propose et je te tiens au courant.
Amitiés AEC1...
Commenter la réponse de AEC1
Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 décembre 2012
- 24 oct. 2012 à 06:10
0
Merci
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...
Commenter la réponse de AEC1
Messages postés
98
Date d'inscription
mercredi 31 octobre 2007
Dernière intervention
24 décembre 2012
- 8 nov. 2012 à 05:43
0
Merci
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
Commenter la réponse de AEC1

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.