c# - 无法绑定(bind)到数据源上的属性或列名称。参数名称 : dataMember

标签 c# asp.net data-binding

这是我尝试绑定(bind)到 System.Type.Name 时遇到的异常。

这是我正在做的:

this.propertyTypeBindingSource.DataSource = typeof(System.Type);

/* snip */

this.nameTextBox1.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyTypeBindingSource, 
        "Name", true));

绑定(bind)到 System.Type 是否有一些技巧,是不允许的还是有任何解决方法?绑定(bind)到其他类型没有问题。

最佳答案

确实,Type 有特殊处理...这种方法在 IDE 等中用于提前配置元数据。如果您查看 IDE 生成的绑定(bind),它们会执行以下操作:

bindingSource1.DataSource = typeof(MyObject);

说“当我们获得真实数据时,我们期望 MyObject 是实例”;即,当您请求“名称”时,它正在寻找名称属性 在 MyObject 上 - 而不是 Type 实例的名称。这允许网格等获取它们的元数据而无需等待真实数据;但因此您不能“真正”绑定(bind)到 Type。

System.ComponentModel 代码在简单绑定(bind)和列表绑定(bind)(提供或接受货币管理器)之间是相同的,因此简单绑定(bind)也继承了此行为。同样,您不能绑定(bind)到实现 IList/IListSource 的类的属性,因为这是以特殊方式解释的。

您的额外类(class)似乎是一种合理的方法。

关于c# - 无法绑定(bind)到数据源上的属性或列名称。参数名称 : dataMember,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220392/

相关文章:

c# - 在 winform 对象之间传递对象

winforms - ObservableCollection(Of T) vs BindingList(Of T)?

javascript - Angular : use a variable into <div>

c# - 在 LINQ 中列出列

c# - SQLite 在其他进程中触发和引发事件

android - 如何将 Android 模拟器连接到本地主机服务器?

c# - 如何在 SSRS (SQL Server 2012) 中访问 session 变量?

asp.net - 如何在没有类资源管理器的情况下将属性添加到属性映射?

c# - 路径可视化

c# - 如何使用 asp.net mvc 3 和 c# 清除 cookie?