【问题标题】:Binding DataTable with ListBox将 DataTable 与 ListBox 绑定
【发布时间】:2019-01-07 06:00:51
【问题描述】:

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

数据集

数据表

数据视图

数据视图管理器

绑定源

所以,我有一个简单的代码来理解这个结构。

我已经用列表框 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 by。

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

如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 请注意,tagging help page 明确指出:“避免在以下任何格式的标题中插入标签:” ... “[标签]:[问题标题]"
  • 如果它真的是 Winforms,BindingSource 可能是您想要使用的 - 或者根本不需要,因为 DataTable 可以工作

标签: c#


【解决方案1】:

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

数据源
- 表示数据源的对象。
- 这是一个主数据源,注意它不是绑定到List.Box.DataSource的数据源

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

你可以设置ListBox.DataSource而不需要任何额外的绑定

listBox.DataSource = myDataTable;

查看链接:Windows Forms Data Binding
应该有足够的信息来说明如何使用数据绑定,如果您通过示例,您会很好地了解如何使用数据绑定来满足您的要求。

【讨论】:

  • 感谢您的回复。我仍然无法找到使用 Binding 构造的方法。我知道可以使用 BindingSource,但是,我想了解这个 Binding 构造函数是如何工作的。另外,我有兴趣使用 DataSourceUpdateMode
  • @user2288650,检查我添加到答案中的链接。
  • 谢谢 - Fabio,我已经阅读了文档,我可以让绑定在 Textbox 上正常工作。只是列表框不起作用,
【解决方案2】:

您不需要任何额外的绑定。 您可以将 List、Array、Tables 分配给 DataSource 并在使用 List 时提供 DisplayMemberValueMember DataSource 对象或表,如果使用单维数组,则无需提供 DisplayMemberValueMember

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

【讨论】:

  • 感谢您的回复。我只是想了解这个 Binding 构造函数是如何工作的
猜你喜欢
  • 2016-04-27
  • 2012-10-09
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多