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

时间:2008-10-21 00:18:27

标签: c# asp.net data-binding

当我尝试绑定到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的技巧,是不允许的还是有任何解决方法?绑定到其他类型没有问题。

3 个答案:

答案 0 :(得分:12)

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

bindingSource1.DataSource = typeof(MyObject);

说“当我们获得真实数据时,我们期望MyObject isntance(s)”;即,当您要求“名称”时,它正在MyObject 上查找名称属性 - 而不是Type实例的名称。这允许网格等获取其元数据而无需等待实际数据;但结果你无法绑定到“真实”类型。

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

你的额外课程似乎是一种合理的方法。

答案 1 :(得分:3)

找到了解决方法。上课

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));

完全符合要求。

答案 2 :(得分:0)

此错误的可能原因之一是表/数据集没有指定的列。 特别是,在Typed DataSet的情况下,请确保XSD中的专有名称与表

中的列名匹配