如何为通用列表集合分配数据源?
时间:2020-03-06 14:51:45 来源:igfitidea点击:
我有一个通用列表,即List <myclass>
。这里的" myclass"包含两个字符串属性。
如何为列表集合分配数据源?
解决方案
我们反过来了。诸如网格之类的数据绑定对象可以将通用列表设置为其数据源。
我们必须手动填充列表或者使用为我们填充列表的技术(例如LINQ to SQL,NHibernate)
你不能那是因为列表不是IBindableComponent。 Windows窗体是:请参见MSDN控件类。
Mirmal,我想英语不是母语,这个问题不是很清楚。我认为我们要问的是给我们班级的列表,然后如何将该列表绑定到某物(列表框或者组合框等)
这是如何执行此操作的简单代码段。
private void button2_Click(object sender, EventArgs e) { List<MyClass> list = new List<MyClass>(); list.Add(new MyClass() { FirstName = "Tim", Lastname = "Jarvis"}); list.Add(new MyClass() { FirstName = "John", Lastname = "Doe" }); listBox1.DataSource = list; listBox1.DisplayMember = "FirstName"; // or override MyClass's ToString() method. }
我希望这能回答问题。
我们没有将数据源分配给List <>
对象。不过,我们可以使用List <>作为用户界面控件的数据源。
如果想制作,可以从List <>派生并实现IBindableComponent,这将允许我们提供将数据绑定到列表的机制。几乎可以肯定,这不是实现我们想要做的事的最佳方法。
编辑:如果我们有一个控件并想要检索数据源,并且知道它是一个List <>对象,则可以执行以下操作:
List<MyClass> lst = listBox1.DataSource as List<MyClass>;
从一个简单的类开始:
// create a dummy class public class MyClass { private string name; public MyClass(string name) { ItemName = name; } public string ItemName { get { return name; } set { name = value; } } }
创建一个绑定列表,然后向列表中添加一些类:
// create a binding list BindingList<MyClass> my_list = new BindingList<MyClass>(); // add some clssses to the list my_list.Add(new MyClass("Item #1")); my_list.Add(new MyClass("Item #2"));
将列表绑定到列表框数据源,以指示在列表框显示中使用哪个类属性:
// make the list the datasource for a listbox listBox1.DataSource = my_list; // this is the property of the class displayed in the listbox listBox1.DisplayMember = "ItemName";
我们可以将列表包装到绑定列表中:
System.ComponentModel.BindingList<myClass> bindingList = new System.ComponentModel.BindingList<myClass>(originalList);
戈兰