加载ListBox的正确方法是什么?

时间:2008-11-19 20:28:17

标签: c# .net winforms

在C#.NET 2.0 Winforms中加载ListBox的正确方法是什么?

我以为我可以将它绑定到DataTable。没有这样的运气。
我以为我可以用Dictionary绑定它。没运气。

我是否必须编写一个名为KeyValuePair的类,然后使用List<KeyValuePair>只是为了能够用对象加载这个东西?也许我错过了一些明显的东西。我希望我的显示文本和值是不同的值。

6 个答案:

答案 0 :(得分:65)

简单的代码示例。假设您有一个包含3个属性的Person类。 FirstNameLastNameAge。假设您要将列表框绑定到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";

技巧是DisplayMemberValueMember

答案 1 :(得分:5)

让我们假设您的数据类型称为MyDataType。在该数据类型上实现ToString()以确定显示文本。 e.g:

class MyDataType
{
  public string ToString()
  {
    //return the text you want to display
  }
}

然后你可以得到一个由你的数据类型组成的列表,并通过AddRange()将它塞进ListBox,如下所示:

ListBox l;
List<MyDataType> myItems = new List<MyDataType>(); // populate this however you like
l.AddRange(myItems.ToArray());

如果您需要更多帮助,请告诉我们 - 了解您要在列表框中显示的数据类型会有所帮助。

答案 2 :(得分:5)

你可以直接bind a DataTable ......

listbox.ValueMember = "your_id_field";
listbox.DisplayMember = "your_display_field";
listbox.DataSource = dataTable;

答案 3 :(得分:3)

您可以将数据源设置为您希望实现IList或IListSource的任何数据源。

您还需要将DisplayMember和ValueMember属性设置为要显示的字段,并分别使用相关的值。

答案 4 :(得分:1)

使用DataSource参数来减少性能 - 至少在ComboBoxes上,

我现在已经习惯于在对象上覆盖ToString(),只是使用Items.AddRange()方法添加对象,正如上面的另一个评论者所描述的那样。

答案 5 :(得分:1)

要绑定到字典,您必须将其包装在新的BindingSource对象中。

MyListBox.DataSource = New BindingSource(Dict, Nothing)
MyListBox.DisplayMember = "Value"
MyListBox.ValueMember = "Key"