IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Tri alphabetique d'un DBGrid [Débutant]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut Tri alphabetique d'un DBGrid
    Bonjour,
    J'ai cherché dans le forum mais j'ai pas trouvé de réponse qui me convienne...

    Voilà mon problème:

    J'ai besoin de trier un DBGrid simplement en cliquant sur le nom du champ ( par exemple en cliquant sur le champ "nom", tout se trie par rapport au nom, ou encore en cliquant sur le champ "prenom", tout se trie par rapport au prénom ).

    Je sais comment faire via une requête SQL mais le problème c'est qu'il me faut créer un deuxième DBGrid pour ensuite lui donner les valeurs triées et je ne dois pas utiliser deux DBGrid!

    J'avais pensé à un composant : le AdvStringGrid qui est un composant amélioré du StringGrid et qui est payant, il permet via l'inspecteur d'objet de donner la possibilité de cliquer sur le nom du champ pour que ce soit trié sans aucune ligne de code...
    Mais problème, il ne gère pas l'accès à la base de donnée ( pas de champ Datasource dans l'inspecteur d'objet ). Donc je suis un peu bloqué, personne a eu ce problème auparavant?
    Thanks

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Il suffit d'utiliser l'évènement OnTitleClick de ton DBGrid pour modifier ta requête SQL en fonction de la colonne cliquée. Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TFOpenQuiz::DBGrid1TitleClick(TColumn *Column)
    {
      AnsiString newOrderBy = " ORDER BY " + Column->FieldName ;        
      Query1->Active = false ;
    //[...] réécrire ta requête SQL
      Query1->SQL->Add( newOrderBy  );
      Query1->Active = true;
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    Merci pour ta réponse...

    J'ai mi ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
    {
                 AnsiString newOrderBy = " ORDER BY " + Column->FieldName ;
      Query1->Active = false ;
     
      Query1->SQL->Add("SELECT * FROM dockers");
      Query1->SQL->Add( newOrderBy  );
      Query1->Active = true;
     
    }
    Mais j'ai une erreur de classe d'exception ect ... quand je clique sur le champ
    "Utilisation incorrect du mot clé élément. SELECT"

  4. #4
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Il faut que tu purge ta requête (Clear) avant d'écrire la nouvelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
    {
                 AnsiString newOrderBy = " ORDER BY " + Column->FieldName ;
      Query1->Active = false ;
      Query1->SQL->Clear(); // <= A TOUJOURS AJOUTER AVANT D'ÉCRIRE UNE REQUÊTE
      Query1->SQL->Add("SELECT * FROM dockers");
      Query1->SQL->Add( newOrderBy  );
      Query1->Active = true;
     
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    OK, bon j'ai plus le message d'erreur mais ça marche pas. Et j'ai pas contre le message d'erreur qui revient pour les deux autres colonnes (quand je clique dessus).

    Je vais réfléchir, si tu as une idée de ton coté, hésite pas...
    thanks en tout cas

  6. #6
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Est ce que ton TQuery (Query1) et ton TDBGrid (DBGrid1) son reliés l'un à l'autre via un TDataSource? Sinon c'est normal que ca ne marche pas...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [deb]Try alphabetique de string?
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/12/2005, 11h04
  2. [LG]Tri alphabetique avec les pointeurs
    Par zbooon dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2005, 17h04
  3. Tri alphabetique
    Par wil4linux dans le forum C++
    Réponses: 17
    Dernier message: 16/02/2005, 23h02
  4. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  5. [LG]tri alphabétique
    Par Marcus2211 dans le forum Langage
    Réponses: 5
    Dernier message: 17/11/2003, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo