web-dev-qa-db-fra.com

Impossible de se connecter au nouveau membre d'affichage dans la liste déroulante

J'ai une classe qui me donne cette erreur

public class Item 
{
    public string Name;
    public int Id

    public Item(string name, int id) 
    {
        Name = name; 
        Id = id;
    }
}   

Voici ma fonction

 var lstItems = new List<Item>();
 while(...)
 {
     lstItems.Add(new Item(sAd_Ref, Convert.ToInt32(sAd_ID))); 
 }

 comboBox1.DataSource = lstItems;
 comboBox1.ValueMember = "Id";
 comboBox1.DisplayMember = "Name";

Sur l'avant dernière ligne je reçois une exception de

Impossible de se connecter au nouveau membre d'affichage.

11
user3244721

Vous devez définir les propriétés Name et Id. Vous ne pouvez pas lier ComboBox à des champs.

public string Name { get; set; }
public int Id { get; set; }

C'est également indiqué dans docs :

ValueMember Property: obtient ou définit la propriété property à utiliser comme valeur réelle pour les éléments de System.Windows.Forms.ListControl.

13
Selman Genç

Je sais que le message est ancien mais la réponse acceptée n'est pas correcte. Le Op devait modifier l'ordre dans lequel il affectait displayMember, valueMember et Datasource, puis notait la ligne de code ajoutée.

comboBox1.DisplayMember="Name";
comboBox1.ValueMember = "Id";
comboBox1.DataSource = lstItems;
comboBox1.BindingContext = this.BindingContext;
10
Ken

Dans mon cas, je me suis lié à des propriétés pour lesquelles l'attribut Browsable était défini sur false.

C'est à dire. l'erreur est due à:

[Browsable(false)]
public string MyProperty { get; set; }

Et je l'ai résolu en supprimant simplement l'attribut:

public string MyProperty { get; set; }
1
Uwe Keim

Mon problème était que mon source de données était de type list <string> alors je viens de tester

public static void AddDataSource<T>(this ComboBox comboBox, T dataSource, string item)
{
    comboBox.DataSource = dataSource;

    if (!typeof(T).Equals(typeof(List<string>))) // <-- Here
    {
        comboBox.DisplayMember = "Name";
        comboBox.ValueMember = "Value";
    }

    comboBox.SelectedIndex = -1;
    comboBox.Text = $"Select a {item}";
}
0
Demodave