如何为通用列表集合分配数据源?

时间: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 &lt;>对象。不过,我们可以使用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);

戈兰