"Cannot bind to the property or column Name on the DataSource" 但列确实存在

"Cannot bind to the property or column Name on the DataSource" but column does exist

我有以下代码应该在我的 windows 表单中的两个文本框上实现数据绑定:

private void GetData()
{
    bindingSourceStudies.DataSource = StudysTable;
    bindingSourceStudies.DataMember = "ID";

    txtName.DataBindings.Add(new Binding("Text", bindingSourceStudies, "Name"));  //#ERROR
    txtClass.DataBindings.Add("Text", bindingSourceStudies, "Class");
}

但是,当我 运行 它在指示的行失败并显示错误消息:

    Cannot bind to the property or column Name on the DataSource.
Parameter name: dataMember

我知道这个站点上有很多关于这个特定错误的问题,但是,大多数问题,例如 this one 都说指定的列不存在或拼写错误。但正如您在下面看到的,名为 "Name" 的列清楚地存在于 BindingSource 中并且似乎拼写正确。

我已经尝试过使用和不使用 new Binding(...) 语法,但都失败了。显然我遗漏了什么,我在这里做错了什么?

这不是 .DataMember 在 BindingSource 上的用途

  • 如果您将 Bi​​ndingSource 绑定到 DataTable,只需设置 DataSource,例如bindingSourceStudies.DataSource = StudysTable 并且根本不设置 DataMember

  • 如果您曾将 BindingSource 绑定到 DataSet(DataTable 的集合),则设置 .DataSource = theDataSetVariableName 并设置 .DataMember = "TheDataTableNameInsideTheDataSet".

  • 如果您正在显示相关数据并且将此 BindingSource 设置为使其 DataSource 成为另一个 BindingSource[,您还可以将 .DataMember 设置为 DataRelation 的名称=18=]

当您绑定文本框或其他内容时,您在设置绑定时在其中设置“ID”列绑定:

txtName.DataBindings.Add(new Binding("Text", bindingSourceStudies, "ID", true));
                                                                   ^^^^

将多个不同的文本框绑定到同一 BindingSource 上的不同列

BindingSources 维护“当前记录”的概念 - 当其基础绑定源的“当前”项发生变化时,所有绑定控件将同步更改它们显示的内容。如果您使用多个绑定源,它们都将保持自己的“当前”概念


绑定,简单的方法:

  • 向现有项目添加新的 DataSet 类型文件
  • 向其中添加表、列、设置它们的数据类型等
  • 切换到表单设计器。打开 Visual Studio 的查看菜单,进入 其他 Windows,然后进入 数据源
  • 展开其中的每个节点,注意它们都有下拉菜单。打开下拉菜单看看
  • 将任意节点拖到窗体上。瞧,一个(选择的控件类型)出现,已经绑定到绑定源,已经绑定到数据集中的数据表。拖拽更多控件绑定同一个BS等
  • 在数据集中的表之间添加数据关系。在 DataSources window 中展开更多节点。将作为另一个节点的子节点的节点拖到窗体上。请注意绑定到父绑定源的新绑定源的外观。现在每当父 BS 更改它正在查看的数据时,子 BS 过滤以仅显示其列表中的成员,这些成员是当前父