Каков правильный способ загрузки ListBox?
Каков правильный способ загрузки ListBox
в С#.NET 2.0 Winforms?
Я думал, что могу просто привязать его к DataTable
. Нет такой удачи.
Я думал, что могу связать его с Dictionary
. Не повезло.
Должен ли я писать класс под названием KeyValuePair
, а затем использовать List<KeyValuePair>
, чтобы иметь возможность загружать эту вещь с помощью объектов? Может быть, мне не хватает чего-то очевидного. Я хочу, чтобы текст и значения отображались в разных значениях.
Ответы
Ответ 1
Простой пример кода. Скажем, у вас есть класс Person
с 3 свойствами. FirstName
, LastName
и Age
. Предположим, вы хотите связать свой список с коллекцией объектов Person
. Вы хотите, чтобы на дисплее отображалось первое имя, а значение - возраст. Вот как вы это сделаете:
List<Person> people = new List<Person>();
people.Add(new Person { Age = 25, FirstName = "Alex", LastName = "Johnson" });
people.Add(new Person { Age = 23, FirstName = "Jack", LastName = "Jones" });
people.Add(new Person { Age = 35, FirstName = "Mike", LastName = "Williams" });
people.Add(new Person { Age = 25, FirstName = "Gill", LastName = "JAckson" });
this.listBox1.DataSource = people;
this.listBox1.DisplayMember = "FirstName";
this.listBox1.ValueMember = "Age";
Трюк - это DisplayMember
и ValueMember
.
Ответ 2
Предположим, что ваш тип данных называется MyDataType. Внесите ToString() в этот тип данных, чтобы определить отображаемый текст. например:.
class MyDataType
{
public string ToString()
{
//return the text you want to display
}
}
Затем вы можете взять список, состоящий из вашего типа данных, и вставить его в ListBox через AddRange() следующим образом:
ListBox l;
List<MyDataType> myItems = new List<MyDataType>(); // populate this however you like
l.AddRange(myItems.ToArray());
Сообщите мне, если вам нужна дополнительная помощь - это поможет узнать, какой тип данных вы хотите отобразить в списке.
Ответ 3
Вы можете напрямую привязать DataTable...
listbox.ValueMember = "your_id_field";
listbox.DisplayMember = "your_display_field";
listbox.DataSource = dataTable;
Ответ 4
Вы можете установить источник данных для любого источника данных, который вам нравится, который реализует IList или IListSource.
Вам также необходимо установить свойства DisplayMember и ValueMember в поля, которые вы хотите отобразить, и иметь значения, связанные соответственно.
Ответ 5
Использование параметра DataSource, используемого, по крайней мере, для сосания производительности по ComboBoxes,
Теперь я сильно усердно переопределяет ToString() на объекте и просто добавляет объекты с помощью метода Items.AddRange(), как описывает следующий комментарий выше.
Ответ 6
Чтобы связать со словарем, вы должны обернуть его в новый объект BindingSource.
MyListBox.DataSource = New BindingSource(Dict, Nothing)
MyListBox.DisplayMember = "Value"
MyListBox.ValueMember = "Key"