Как правильно загрузить ListBox? - PullRequest
26 голосов
/ 19 ноября 2008

Как правильно загрузить ListBox в C # .NET 2.0 Winforms?

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

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

Ответы [ 6 ]

65 голосов
/ 19 ноября 2008

Простой пример кода. Допустим, у вас есть класс 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.

5 голосов
/ 20 ноября 2008

Вы можете связать DataTable напрямую ...

listbox.ValueMember = "your_id_field";
listbox.DisplayMember = "your_display_field";
listbox.DataSource = dataTable;
5 голосов
/ 19 ноября 2008

Предположим, что ваш тип данных называется MyDataType. Реализуйте ToString () для этого типа данных, чтобы определить отображаемый текст. e.g.:

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 голосов
/ 19 ноября 2008

Вы можете установить источник данных для любого источника данных, который вам нравится, который реализует IList или IListSource.

Вам также необходимо установить свойства DisplayMember и ValueMember для полей, которые вы хотите отобразить, и иметь значения, связанные с ними соответственно.

1 голос
/ 20 ноября 2008

Для привязки к словарю вы должны обернуть его в новый объект BindingSource.

MyListBox.DataSource = New BindingSource(Dict, Nothing)
MyListBox.DisplayMember = "Value"
MyListBox.ValueMember = "Key"
1 голос
/ 20 ноября 2008

Использование параметра DataSource, используемого для повышения производительности - по крайней мере для ComboBox,

Теперь я в значительной степени вынужден переопределить ToString () для объекта и просто добавить объекты, используя метод Items.AddRange (), как описано в другом приведенном выше комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...