Не удается выполнить привязку к новому элементу 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}";
}