Подтвердить что ты не робот

Каков правильный способ загрузки ListBox?

Каков правильный способ загрузки ListBox в С#.NET 2.0 Winforms?

Я думал, что могу просто привязать его к DataTable. Нет такой удачи.
Я думал, что могу связать его с Dictionary. Не повезло.

Должен ли я писать класс под названием KeyValuePair, а затем использовать List<KeyValuePair>, чтобы иметь возможность загружать эту вещь с помощью объектов? Может быть, мне не хватает чего-то очевидного. Я хочу, чтобы текст и значения отображались в разных значениях.

4b9b3361

Ответ 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());

Сообщите мне, если вам нужна дополнительная помощь - это поможет узнать, какой тип данных вы хотите отобразить в списке.

Ответ 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"