Не удается выполнить привязку к новому элементу display в combobox

у меня есть класс, который дал мне эту ошибку

public class Item 
{
    public string Name;
    public int Id

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

вот моя функция

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

на последней строке я получаю исключение

не удается выполнить привязку к новому члену дисплей.

4 ответов


вы должны сделать Name и Id свойства. Вы не можете связать ComboBox полей.

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

это также указано в docs:

ValueMember Property: получает или задает свойства использовать в качестве фактического значения для элементов в системе.Окна.Формы.Элементе управления listcontrol.


Я знаю, что сообщение старое, но принятый ответ неверен. Op необходимо изменить порядок назначения displayMember, valueMember и Datasource, а затем обратите внимание на добавленную строку кода.

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

в моем случае я привязался к свойствам, которые имели значение false.

т. е. ошибка произошла из-за:

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

и я решил это, просто удалив атрибут:

public string MyProperty { get; set; }

моя проблема заключалась в том, что мой источник данных имел тип List поэтому я просто проверяю это

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