无法绑定到DataSource上的属性或列Name.参数名称:dataMember

本文关键字:参数 Name dataMember 属性 绑定 DataSource | 更新日期: 2023-09-27 17:48:48

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

以下是我正在做的:

this.propertyTypeBindingSource.DataSource = typeof(System.Type);
/* snip */
this.nameTextBox1.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyTypeBindingSource, 
        "Name", true));

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

无法绑定到DataSource上的属性或列Name.参数名称:dataMember

事实上,Type。。。这种方法被用于IDE等中,以提前配置元数据。如果您查看IDE生成的绑定,它们会执行以下操作:

bindingSource1.DataSource = typeof(MyObject);

说"当我们得到真实数据时,我们期望MyObject是实体";即,当您要求"Name"时,它正在查找MyObject上的Name属性,而不是Type实例的Name。这允许网格等在不必等待真实数据的情况下获得其元数据;但因此,您无法绑定到Type"for real"。

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

你的加班似乎是一个合理的方法。

找到了一个解决方法。制作了一个等级

public class StubPropertyType
{
    public StubPropertyType(Type type)
    {
        this.StubPropertyTypeName = type.Name;
    }
    public string StubPropertyTypeName = string.Empty;
}

创建了绑定源

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType);

创建了该类的一个实例,并将文本框绑定到该实例。

this.nameTextBox.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyStubBindingSource, 
        "StubPropertyTypeName", 
        true));

工作完全符合要求。

此错误的一个可能原因是表/数据集没有指定列。特别是,在类型数据集的情况下,请确保XSD中有与表中的列名匹配的正确名称