Lier une liste d'objets à une listbox

Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
- - Dernière réponse : cs_mathmax
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
- 12 févr. 2007 à 11:14
Bonjour,
je cherche à lier simplement une liste d'objets à une listbox. Par exemple si j'ai une liste de personne, j'aimerais afficher les noms de mes personne dans la listbox et que si je modifoe ces noms dans la listbox, les propriétés des objets soient elles aussi modifiées. Je sais faire ce type de liaison quand il n'y a qu'un controle et une propriété à lier (databinding), mais comment fait-on avec une liste d'objet et un composant comme une listbox ?

merci d'avance pour votre aide.
Mathmax
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
1
Merci
Salut,
Le texte d'un objet affiché dans une listbox est celui renvoyé par la méthode ToString de cet objet. Il te suffit donc de déclarer ToString dans ta classe Personne, ensuite pour les ajouter à la listbox, il te suffit de faire Listbox1.Items.Add(Joe);
Ensuite il n'y a plus de lien à faire, lorsque tu voudras modifier les textes de ta listbox, tu feras (excuse moi je fais du vb, mais j'imagine que c'est pareil en C#)
CType(Listbox1.Items(index), Personne).Name = "Joe";
(En supposant que la méthode ToString renvoie le Name de l'objet personne...)

Julien.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Julien237
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
41
0
Merci
((Personne)Listbox1.Items[index]).Name en C#

Mx
MVP C# 
Commenter la réponse de MorpionMx
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
0
Merci
Que je suis bête, CType() en C# ! Il s'agit d'un opérateur en VB pour faire un conversion de type, en C#, tu dois bien évidemment plutôt faire

((Personne) Listbox1.Items(index)).Name = "Joe";

Julien.
Commenter la réponse de Julien237
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
43
0
Merci
Non, les indexeurs sont les crochets et pas les parenthèses...
Voire solution de Mx.

<hr />
-Blog-
Commenter la réponse de cs_Bidou
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
0
Merci
Merci,
Je vois aussi qu'il y a une propriété datasource. Par contre il semble que je doivent rédéfinir les propriétées DataSource,DisplayMember et ValueMember à chaque fois que je modifie ma liste d'objet. Je veux dire qu'une modification de la liste d'objet, n'entraine pas une modification de l'affichage dans ma ListBox. Est-ce normal ?

Mathmax
Commenter la réponse de cs_mathmax
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
j'avais posté ça il y a quelques temps : http://www.csharpfr.com/codes/UTILISATION-COMBOBOX-DATABINDING-OBJECT_34338.aspx

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Commenter la réponse de sebmafate
Messages postés
404
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
0
Merci
Merci pour ta réponse sebmafate.
Ton exemple illustre bien mon problème. Voilà ce que j'aurais aimé pouvoir écrire :

        public Form1()
        {
            InitializeComponent();

            RemplissageCboManual();
            RemplissageDataBinding();

            cboBinding.DataSource = listUser;
            cboBinding.DisplayMember = "Nom";
            cboBinding.SelectedIndexChanged += new EventHandler(cboBinding_SelectedIndexChanged);
            cboManual.SelectedIndexChanged += new EventHandler(cboBinding_SelectedIndexChanged);
        }

        private void RemplissageDataBinding()
        {
            listUser = new ArrayList();
            Personne pers;
           
            pers = new Personne("Maf", "Sébastien",
                1976, 0);
            listUser.Add(pers);
            pers = new Personne("MX", "Morpion",
                1983, 1);
            listUser.Add(pers);
            pers = new Personne("Monpoulet", "Coq",
                1982, 2);
            listUser.Add(pers);
            pers = new Personne("Lefree", "Man",
                1985, 3);
            listUser.Add(pers);
        }

c'est à dire lier une fois cboBinding à listUser puis que à chaque réafection de listUser, cboBinding se mettent automatiquement à jour. Apparament ce n'est pas possible. Il semble qu'il faille redéfinir les propriétés DataSource  et DisplayMember à chaque fois qu'on affecte à listUser une nouvelle ArrayList. J'ai essayé en remplacant le type ArrayList par un type BindingList mais ça ne change rien... une idée ?

merci

Mathmax
Commenter la réponse de cs_mathmax