"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 上的用途
如果您将 BindingSource 绑定到 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 过滤以仅显示其列表中的成员,这些成员是当前父
我有以下代码应该在我的 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 上的用途
如果您将 BindingSource 绑定到 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 过滤以仅显示其列表中的成员,这些成员是当前父