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

Windows Forms Discussion :

Binding de checkedlistbox (winform)


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Binding de checkedlistbox (winform)
    Bonjour j'ai un petit souci de compréhension dans le Binding d'in CheckedListBox

    Si j'emploie une methode de binding direct par assignation d'une datasource, cela semble fonctionner tres bien. Mais cela me pose deux problèmes :
    1- En aucun cas je ne souhaite que la datasource originale soit affectée
    2- J'ai lu que cete methode avait un bug

    Donc j'utilise une methode manuelle pour ajouter mes items qui sont les rows d'une datatable contenant deux eléments ID et Valeur

    Mais avec cette methode, le CheckedListBox m'affiche des

    Une idée de mon erreur ?
    Voici le code

    Merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
          chklbDistribution.DisplayMember = "Value";
          chklbDistribution.ValueMember = "ID";
     
    //   Methode d'ajout manuel
          SetClBoxDataSource(chklbDistribution, sCodes.dtModeCom);
     
    //      Methode directe
    //      chklbDistribution.DataSource = sCodes.dtModeCom;
     
     
        }
        // *********************************************************************************
        private void SetClBoxDataSource(CheckedListBox clb, DataTable dt)
        {
          clb.Items.Clear();
     
          int i;
          for (i = 0; i < dt.Rows.Count - 1; i++)
          {
            clb.Items.Add(dt.Rows[i]);
          }
        }
        // *********************************************************************************
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Intuitivement, j'ai résolu le problème en remplacant ma datatable par une DataView

    Mais si quelqu'un peut me donner plus de détail sur ce comportement, je suis preneur
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par olibara Voir le message
    1- En aucun cas je ne souhaite que la datasource originale soit affectée
    Elle ne le sera pas. La CheckedListBox permet juste de cocher des éléments, mais la checkbox n'est pas liée à une propriété de la source de données

    Citation Envoyé par olibara Voir le message
    2- J'ai lu que cete methode avait un bug
    Je ne sais pas s'il y a un bug, mais le DataBinding n'est pas "officiellement" supporté pour ce contrôle : la propriété DataSource est marquée comme "Infrastructure", et est masquée dans le designer et l'intellisense. En pratique, ça semble marcher correctement... je l'utilise dans une application en production et ça n'a jamasis posé de problème.


    Pour ton problème : je ne suis pas sûr que le DisplayMember fonctionne si tu n'utilises pas la propriété DataSource. Par contre, en data binding ça marche comme dans les autres contrôles de liste.

    Si tu préfères ne pas utiliser le DataBinding, tu peux utiliser l'évènement Format pour définir la valeur à afficher

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Elle ne le sera pas. La CheckedListBox permet juste de cocher des éléments, mais la checkbox n'est pas liée à une propriété de la source de données
    Evidemment grand chef !
    Ou avais-je la tête

    Pour ton problème : je ne suis pas sûr que le DisplayMember fonctionne si tu n'utilises pas la propriété DataSource. Par contre, en data binding ça marche comme dans les autres contrôles de liste.
    Je pense avoir capté que le Binding fonctionne sur un DataRowView, pas un datarow, du coup si j'insere des datarowiew en passant par un DataView, ca passe.
    Mais je pense que je vais quand meme utiliser un Binding simple

    N.B. Le bug dont je parlais

    http://www.codeproject.com/KB/combob...edlistbox.aspx
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bon à savoir... Le workaround proposé me parait pas mal. Par contre si tu ajoutes un item à la DataTable après avoir ajouté les items à la CheckedListBox, il n'apparaitra pas automatiquement...

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Le workaround proposé me parait pas mal
    Sauf qu'il faut passer par un DataRowView sinon le DisplayMember n'agit pas
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 126
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par olibara Voir le message
    Sauf qu'il faut passer par un DataRowView sinon le DisplayMember n'agit pas
    Bonjour,

    Peux-tu s'il te plait me passer le code finale que t'a utilisé pour cherger la CheckedListBox?

    Merci

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

Discussions similaires

  1. CheckedListBox et double Binding
    Par jb_exe dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 28/07/2009, 11h53
  2. CheckedListBox Binding CheckedItems
    Par adrienfehr dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/03/2009, 18h04
  3. dataset, winform, binding, requetage
    Par jcervelle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/04/2007, 19h17
  4. Réponses: 2
    Dernier message: 21/08/2006, 21h27

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