【问题标题】:Cannot bind to the property or column Name on the DataSource. Parameter name: dataMember无法绑定到 DataSource 上的属性或列名称。参数名称:dataMember
【发布时间】:2010-09-18 05:40:07
【问题描述】:

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

【问题讨论】:

标签: c# asp.net data-binding


【解决方案1】:

找到了解决方法。上课了

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】:

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

    【讨论】:

      【解决方案3】:

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

      bindingSource1.DataSource = typeof(MyObject);
      

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        相关资源
        最近更新 更多