【问题标题】:"Cannot bind to the property or column Name on the DataSource" but column does exist“无法绑定到数据源上的属性或列名称”但列确实存在
【发布时间】:2020-10-10 00:25:59
【问题描述】:

我有以下代码应该在我的 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(...) 语法,但无论哪种方式都失败了。显然我错过了什么,我在这里做错了什么?

【问题讨论】:

    标签: c# data-binding .net-4.5 bindingsource


    【解决方案1】:

    这不是 .DataMember 在 BindingSource 上的用途

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

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

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

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

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

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

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


    绑定,简单的方法:

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

    【讨论】:

    • 啊啊啊!这就是 BindingSource.DataMember 的工作原理!我只是从MS example 翻译,它没有注册它是数据集中的表名。谢谢!
    • 没问题!我在答案中添加了另一条信息;如果你没有看到它,点击刷新再看看
    • 有趣的是,他们在 MS 示例中没有告诉你的是,所有这数百行代码都是由 Visual Studio 编写的,而不是人类,使用“绑定,简单的方法”我写过关于.. 确保你不要像那样浪费你的生命来堵塞样板,当几次点击和拖动就可以做到这一切时
    • 是的,大量的代码,并没有太多解释发生了什么以及为什么。关于数据绑定的 MS 文档可能会好很多。
    • 大多数情况下它是其他东西的一部分;就像我在“制作数据集,添加一些表,然后将列拖到表单上”过程中所描述的那样 - 更大的总体目标是“将数据库数据下载到数据集并在表单上显示,更新并保存它“ - 实际上,可以完全通过鼠标单击完成的过程.. 数据绑定只是其中的一小部分,在大多数情况下,人类不会手动编码,因此没有深入的记录,我认为
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 2021-04-09
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多