10
votes

Est-il possible de trier un TDBGRAD dans un champ de recherche?

J'ai un dbgrid avec une colonne basée sur un champ de recherche.

Comment puis-je le configurer pour que lorsqu'un utilisateur clique sur le titre de la colonne, il triera par ce champ.

Mon problème ici est que je ne peux pas comprendre un moyen de créer un index sur un champ de recherche.

J'utilise une base de données absolue pour cela, mais la plupart des choses qui fonctionnent avec le BDE ou TCLientDaTaset fonctionneront avec absolue.

merci!


0 commentaires

4 Réponses :


6
votes

Je ne pense pas qu'il soit possible de créer un index sur un champ de recherche. Il est possible de créer un index sur un champ calculé en interne d'un clientDataset. Dans le gestionnaire d'événements Oncalcfields, définissez sa valeur à la valeur du champ de recherche. Et définissez la propriété visible du champ de recherche sur FALSE. Maintenant, vous pouvez trier sur le champ calculé en interne.


1 commentaires

Comme il s'agit d'un champ de recherche, vous voudrez également ajouter des données supplémentaires à votre champ calculé à des fins de tri afin d'identifier de manière unique chaque enregistrement. Cela évitera le problème des actualisations éventuellement modifiant l'ordre des enregistrements regroupés par la même valeur de recherche.



1
votes

Vous ne pouvez pas trier par champ de recherche. Mais vous pouvez «simuler» cela. Supposons que vous ayez les tableaux suivants: (PK signifie la clé primaire)

les contacts
  • ID - INTEGER (PK)
  • Nom - Varchar (40)
  • CountryID - Integer

    pays
    • ID - INTEGER (PK)
    • Nom - Varchar (40)

      Ensuite, vous pouvez avoir la requête suivante dans l'ensemble de données qui est liée au TDBGRID: xxx

      (non testé mais je pense que vous avez eu l'idée )

      Aussi, vous pouvez la mettre dans une vue.

      Ensuite, vous allez afficher dans votre TDBGRRID (en tant que colonnes) seul l'identifiant, le nom et le Champ de recherche souhaité que vous avez déjà (appelons-le coundlook).

      Lorsque vous cliquez sur l'en-tête de titre, vous pouvez modifier la requête en ajoutant dans la quatrième ligne une commande par. Pour la colonne spécifique du champ de recherche (CountryLook), au lieu d'utiliser le mappage 1: 1, vous pouvez mettre dans la 4ème ligne de votre ordre de requête par CO.Name. Remplissez la requête et c'est tout. En pratique, c'est beaucoup plus simple que ma description ici.


0 commentaires

4
votes

Ce que vous pouviez faire (surtout si les données sont réadonnées et ne disposent pas de zillions de lignes) utilisent un clientDataset pour afficher des données dans votre grille.

grossièrement les étapes seraient comme ceci:

  1. Chargez les données de votre régularisation dans le clientDataSet,
  2. Ajoutez un champ calculé au clientDataset contenant la valeur obtenue à partir de la recherche,
  3. Ajoutez ensuite un index à celui calculé champ.

    - Jeroen


0 commentaires

0
votes

DevExpress ExpressQutanMgrid peut le faire, vérifiez-le: http://www.devexpress.com/products/vcl/exqueUngrid/


0 commentaires