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.
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.
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;
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; }
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}";
}