Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载列表框的正确方法是什么?_C#_.net_Winforms - Fatal编程技术网

C# 加载列表框的正确方法是什么?

C# 加载列表框的正确方法是什么?,c#,.net,winforms,C#,.net,Winforms,在C#.NET 2.0 Winforms中加载列表框的正确方法是什么 我想我可以把它绑定到一个DataTable。没有这样的运气。 我想我可以用字典把它装订起来。不走运 我是否必须编写一个名为KeyValuePair的类,然后使用List来加载对象?也许我错过了一些明显的东西。我希望我的显示文本和值是不同的值。假设您的数据类型称为MyDataType。在该数据类型上实现ToString()以确定显示文本。e、 g: class MyDataType { public string ToStr

在C#.NET 2.0 Winforms中加载
列表框的正确方法是什么

我想我可以把它绑定到一个
DataTable
。没有这样的运气。
我想我可以用
字典
把它装订起来。不走运


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

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

class MyDataType
{
  public string ToString()
  {
    //return the text you want to display
  }
}
然后,您可以获取由数据类型组成的列表,并通过AddRange()将其填充到列表框中,如下所示:

ListBox l;
List<MyDataType> myItems = new List<MyDataType>(); // populate this however you like
l.AddRange(myItems.ToArray());
listboxl;
List myItems=new List();//按您喜欢的方式填充此文件
l、 AddRange(myItems.ToArray());

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

简单代码示例。假设您有一个具有3个属性的
Person
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";
List people=newlist();
添加(新人物{Age=25,FirstName=“Alex”,LastName=“Johnson”});
添加(新人{Age=23,FirstName=“Jack”,LastName=“Jones”});
添加(新人{Age=35,FirstName=“Mike”,LastName=“Williams”});
添加(新人{Age=25,FirstName=“Gill”,LastName=“JAckson”});
this.listBox1.DataSource=人;
this.listBox1.DisplayMember=“FirstName”;
this.listBox1.ValueMember=“Age”;

诀窍在于
DisplayMember
,以及
ValueMember

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

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

您可以直接

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

使用DataSource Parameter,用于至少在组合框上吸取性能方面的信息


我现在习惯于重写对象上的ToString(),只需使用Items.AddRange()方法添加对象,正如上面另一位评论员所描述的那样。

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

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

我想这看起来很奇怪。如果您正在处理一个小项目,其中您只使用数据集/数据表,没有业务对象。我想我可以写一个KeyValuePair类。public class KeyValuePair{public object Key{get;set;}public object Value{get;set;}}我什么时候错过了向框架添加内置KVP的机会。。。哎呀,我觉得自己很笨。数据源应该设置在DisplayMember和ValueMember属性之后,以防止多次重新查询。