将DataTable与ListBox绑定

时间:2019-01-07 06:00:52

标签: c#

我正在试验和学习Windows窗体应用程序,无法确定绑定结构。 根据MSDN文档:-您可以为数据源指定以下任何类的实例:

数据集

数据表

DataView

DataViewManager

BindingSource

因此,我有一个简单的代码来了解此构造。

我已经用列表框listBox1和DataTable data_table初始化了一个简单的Windows窗体。

 static DataTable data_table = new DataTable("ParentTable");  
DataColumn column;
                DataRow row;
                column = new DataColumn();
                column.DataType = System.Type.GetType("System.Int32");
                column.ColumnName = "id";
                column.ReadOnly = false;
                column.Unique = true;
                // Add the Column to the DataColumnCollection.
                data_table.Columns.Add(column);
                for (int i = 0; i <= 2; i++)
                {
                    row = data_table.NewRow();
                    row["id"] = i;

                    data_table.Rows.Add(row);
                }

可以直接绑定到DataSource。

listBox1.DataSource=new BindingSource(data_table , null);
listBox1.ValueMemeber="id";

但是当我使用以下内容

 Binding myBinding = new Binding("DataSource", data_table, "id");

 form_m.listBox1.DataBindings.Add(myBinding);

我遇到异常

  

System.ArgumentException:复杂的DataBinding接受作为数据源   IList或IListSource

如果有人可以帮助我,我将非常感谢。

2 个答案:

答案 0 :(得分:1)

您正在使用带有三个参数Binding(String, Object, String)的构造函数重载
参数在哪里
propertyName
 -要绑定的控件属性的名称。
 -DataSource您的情况

数据源
 -代表数据源的对象。
 -这是主要数据源,请注意,它不是将绑定到List.Box.DataSource

的数据源

dataMember
 -要绑定的属性或列表。
 -这是主数据源中属性的名称,该值将绑定到控件的DataSource。该值应该是IList或IListSource

您可以设置ListBox.DataSource,而无需任何额外的约束

listBox.DataSource = myDataTable;

检查链接:Windows Forms Data Binding
应该有足够的有关如何使用数据绑定的信息,并且如果您通过示例进行操作,您将很好地了解如何根据需要使用数据绑定。

答案 1 :(得分:0)

您不需要任何额外的绑定。 您可以将 List,Array,Tables 分配给 DataSource ,还可以在使用List of of时提供 DisplayMember ValueMember 。对象或表作为数据源,如果您使用一维数组,则无需提供 DisplayMember ValueMember

listbox1.DataSource = data_table; 
listbox1.ValueMember = "id"; 
listbox1.DisplayMember = "id";