6
votes

Comment se lier à une liste de comboBox à une liste générique avec des propriétés d'affichage profond et d'immatriculation?

J'essaie de lier une liste générique comme Liste des parents à un ComboBox.

    public Form1()
    {
        InitializeComponent();
        List<Parent> parents = new List<Parent>();
        Parent p = new Parent();
        p.child = new Child();
        p.child.DisplayMember="SHOW THIS";
        p.child.ValueMember = 666;
        parents.Add(p);
        comboBox1.DisplayMember = "child.DisplayMember";
        comboBox1.ValueMember = "child.ValueMember";
        comboBox1.DataSource = parents;
    }
}
public class Parent
{
    public Child child { get; set; }
}
public class Child
{
    public string DisplayMember { get; set; }
    public int ValueMember { get; set; }
}


0 commentaires

3 Réponses :


0
votes

qui fera le travail: xxx

Si les enfants étaient dans une classe parent, vous pouvez simplement utiliser: xxx

, Si vous avez besoin de lier aux enfants de plusieurs parents, vous pouvez effectuer ce qui suit: xxx


0 commentaires

8
votes

Je ne pense pas que vous puissiez faire ce que vous essayez. La conception ci-dessus montre qu'un parent ne peut avoir qu'un seul enfant. Est-ce vrai? Ou avez-vous simplifié la conception dans le but de cette question?

Ce que je recommanderais, que ce soit un parent puisse avoir plusieurs enfants, est que vous utilisez un type anonyme comme source de données pour la liste déroulante et peupler que Tapez à l'aide de LINQ. Voici un exemple: xxx


1 commentaires

Cela fonctionne parfaitement @essedbl !! Merci beaucoup. Et oui j'ai simplifié mon problème, mais dans mon exemple réel, le parent ne peut avoir qu'un seul enfant. Merci encore



0
votes

Vous pouvez simplement intercepter l'événement de DataSource modifié et effectuer des liaisons d'objet spécifiques.


1 commentaires

Bienvenue dans le débordement de la pile! Lorsque vous répondez aux questions, veuillez fournir des détails sur vos solutions afin qu'ils soient les plus utiles à l'ask à questions. Merci!