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

  1. #1
    Candidat au Club
    Comment faire en sorte qu'un TCheckGroup gère des IDs en plus des libellés
    Bonjour,

    J'utilise Lazarus pour un projet mais je rencontre une difficulté quant à l'utilisation du composant TCheckGroup

    Ce composant est alimenté par une table qui contient une colonne ID et une colonne Libellé.

    Le TCheckGroup affiche correctement la liste des libellés mais c'est la que vient la difficulté.
    Lorsque que mes CheckBoxs sont cochées, j’appuie sur un bouton valider qui va positionner mes choix dans une autre table qui elle ne comporte que les ID et pas les libellés.
    Le problème c'est que mon TCheckGroup contient la liste des libellés mais pas celle des ID de libellé.

    J'ai chercher la possibilité de créer une colonne ID "cachée" dans le TCheckGroup qui me permettrai de récupérer les ID correspondant aux cases cochées pour pouvoir les positionner dans la table, mais je ne parviens pas à le faire. Est ce possible ?
    Sinon avez vous une autre idée qui pourrait répondre à mon problème ?

    J'espère avoir été assez clair dans la description du problème

    Merci pour vos réponses.

  2. #2
    Membre éclairé
    Bonjour,

    Puisqu'il n'existe pas de liste pour les ID, il faut en créer une.

    De là, deux manières de la remplir :

    • utiliser l'évènement "OnItemClick" pour remplir la liste ID
    • balayer tous les items lors de la validation pour remplir la liste.

    Cordialement.

    Pierre

  3. #3
    Candidat au Club
    Bonjour,

    je vous remercie pour cette réponse.

    Je vais essayer cela.

    Cordialement.

  4. #4
    Membre expert
    Salut

    Je pense que tu fais fausse route, si j'ai bien compris ton besoin.

    Il existe le composant TDBLookupComboBox qui permet un choix unique et qui gère le couple (code, libellé), on affiche le libellé mais on manipule le code en interne. De mémoire, il faut définir :
    - soit autant de champs de type référence dans l'ensemble de données cible (celui qui récupère les ID) à partir de l'éditeur de champs persistants et affecter la propriété DataField du composant avec ce champ de type référence, j'utilisais cette méthode dans Delphi il y a longtemps.
    - soit de mettre en oeuvre les propriétés ListSource et ListField qui semble ne pas nécessiter de champ persistants, je ne l'ai jamais utilisé.

    Désolé mais je n'ai pas trop le temps de détailler maintenant.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.8 (FPC 3.0), Python 3 -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal
    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Candidat au Club
    Bonjour,

    Je connais le TDBLookUpComboBox, je l'utilise déjà et est effectivement très pratique pour récupérer l'ID du choix qui a été fait dans le composant.
    Cela fonctionne très bien.

    En revanche dans le cas présent, j'aimerai faire la même chose mais avec un composant TCheckGroup ou TCheckListbox mais ils ne comportent pas de propriété DataField, ListSource, ListField comme le TDBLookUpComboBox

    Pour rappel mon TCheckGroup est alimenté par une table. Cette table est composé d'une colonne ID et d'une colonne Libellé
    Le TCheckGroup affiche actuellement chaque libellé de ma table. Lorsque que je coche une case j'aimerai pouvoir récupérer l'ID du libellé coché

    Merci beaucoup pour votre réponse et ne vous excusez pas de ne pas pouvoir détaillé plus.

    Cordialement.

  6. #6
    Membre régulier
    Bonjour.

    Je ne suis pas sûr d'avoir bien compris ton besoin ...
    Le TCheckGroup est un ensemble de cases à cocher, chacune ayant un "caption" qui peut être récupéré ensuite. Donc, s'il est alimenté uniquement avec des libellés provenant d'une table, on ne peut récupérer que ce libellé !

    Je vois plusieurs solutions :
    • comme on te l'a déjà suggéré, tu crées une liste contenant les id. Quand tu alimentes le TCheckGroup avec un libellé, tu mets en même temps l'id correspondant dans ta liste. Quand ensuite tu cliques sur le libellé d'index 4 par exemple, l'id correspondant est celui d'index 4 dans la liste ...
    • ou alors, connaissant le libellé, tu vas à l'enregistrement correspondant de ta table et trouves ainsi l'id (cela nécessite je pense que les libellés soient uniques dans la table).
    • moins "beau" : tu alimentes ton TCheckGroup avec l'id et le libellé séparés par un tiret (ou autre caractère de ton choix) par exemple : "27 - Mon libellé", que tu dois décomposer quand tu le récupères.


    Cordialement.

  7. #7
    Candidat au Club
    Bonjour,

    Citation Envoyé par thewolf Voir le message

    Le TCheckGroup est un ensemble de cases à cocher, chacune ayant un "caption" qui peut être récupéré ensuite. Donc, s'il est alimenté uniquement avec des libellés provenant d'une table, on ne peut récupérer que ce libellé !
    Effectivement il est actuellement alimenté avec les libellés seulement. Mais avant cela j'avais essayé de l'alimenter avec l'ID et le Libellé. Seul problème c'est que je me retrouvais avec une case a cocher pour l'ID puis une case a cocher pour le libellé et ainsi de suite pour chaque enregistrement de la table.

    Citation Envoyé par thewolf Voir le message

    comme on te l'a déjà suggéré, tu crées une liste contenant les id. Quand tu alimentes le TCheckGroup avec un libellé, tu mets en même temps l'id correspondant dans ta liste. Quand ensuite tu cliques sur le libellé d'index 4 par exemple, l'id correspondant est celui d'index 4 dans la liste ...
    ou alors, connaissant le libellé, tu vas à l'enregistrement correspondant de ta table et trouves ainsi l'id (cela nécessite je pense que les libellés soient uniques dans la table).
    Je vais tester ces deux options

    Merci beaucoup.

    Cordialement

  8. #8
    Candidat au Club
    Problème résolu.

    j'ai opté pour cette solution :
    Citation Envoyé par thewolf Voir le message

    Tu crées une liste contenant les id. Quand tu alimentes le TCheckGroup avec un libellé, tu mets en même temps l'id correspondant dans ta liste. Quand ensuite tu cliques sur le libellé d'index 4 par exemple, l'id correspondant est celui d'index 4 dans la liste
    Merci beaucoup d'avoir pris le temps de m'aider.

    Cordialement.