Lier une liste d'objets à une listbox

cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008 - 11 févr. 2007 à 21:05
cs_mathmax Messages postés 403 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

7 réponses

Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
11 févr. 2007 à 22:05
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.
1
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
11 févr. 2007 à 22:08
((Personne)Listbox1.Items[index]).Name en C#

Mx
MVP C# 
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
11 févr. 2007 à 22:08
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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 févr. 2007 à 22:20
Non, les indexeurs sont les crochets et pas les parenthèses...
Voire solution de Mx.

<hr />
-Blog-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
11 févr. 2007 à 22:20
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
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
12 févr. 2007 à 10:39
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]
0
cs_mathmax Messages postés 403 Date d'inscription vendredi 28 octobre 2005 Statut Membre Dernière intervention 31 août 2008
12 févr. 2007 à 11:14
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
0
Rejoignez-nous