cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 août 2008
-
11 févr. 2007 à 21:05
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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 ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 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...)
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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 ?
cs_mathmax
Messages postés403Date d'inscriptionvendredi 28 octobre 2005StatutMembreDernière intervention31 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 ?