【问题标题】:DataMember property [ObjectName] cannot be found on the DataSource在 DataSource 上找不到 DataMember 属性 [ObjectName]
【发布时间】:2010-10-09 23:29:42
【问题描述】:

我有一个业务对象,它是子对象的组合。
我在 Visual Studio 2008 中使用数据绑定来绑定到 Windows 窗体上的控件。

但是我在表单的 InitializeComponent 方法中遇到了上述错误。

假设我有一个名为 ParentObject 的对象,其中包含一个通用列表 ChildListObject。 ParentObject 也有 Child 对象,它本身有一个 Child 对象。 (即ParentObject.ChildObject.ChildObject)

我设置了主绑定源:

BindingSource.Datasource = ParentObject

我添加一个网格并设置它的绑定源:

GridBindingSource.Datasource = ParentObject

并将 DataMember 设置为:

BindingSourceB.DataMember = "ChildListObject"

现在,网格的数据源设置为 GridBindingSource:

Me.MyDataGridView.DataSource = Me.GridBindingSource

还有其他控件绑定到 ParentObject 和 ParentObject.ChildObject 的属性

我在一个孤立的项目中对此进行了测试,它工作正常,所以我无法找出真正的错误是什么?以前可以工作的代码,会突然停止工作。

我得到的错误是(如果我在上面的例子中使用对象的名称):

"DataMember 属性 ChildObject 不能 可以在 DataSource 上找到”

它失败了:

Me.MyDataGridView.DataSource = Me.GridBindingSource

奇怪的是,如果我删除 然后当它失败时继续它就可以了???但它在运行时仍然失败。

有没有人有任何想法可以为我指明正确的方向?我通过谷歌搜索发现的最接近的是它可能与生成的设计器代码的顺序变得混乱有关。正在运行的代码会突然停止运行。


这个问题似乎来来去去。如果我只是在引发错误后继续,程序会愉快地继续没有问题。可能是VS中的一个错误。但在运行时错误仍然存​​在。

是什么导致了这个问题?如何阻止它发生?

【问题讨论】:

    标签: visual-studio-2008 data-binding business-objects


    【解决方案1】:

    Datamember 应该是一个字符串,用于定义要显示的 List 的哪些属性。这里不需要。

    这是有道理的:

    BindingSourceB.Datasource = ParentObject.ChildList;
    

    如果您绑定到网格,则无需设置 Datamember。只需设置Datasource,然后使用设计器配置网格即可。

    GetType 可以帮助设计者。在设计器属性中,您应该将 BindingSourceB 设置为 ChildListObject 类型,然后执行我上面所做的操作。

    【讨论】:

    • 对不起,这个例子有点错误。我已经编辑并修复了。实际上没有中间对象,只是一个包含子对象通用列表的父对象。我没有在网格上设置数据成员属性。不过还是谢谢你的帮助。
    【解决方案2】:

    我发现的唯一解决方法是:

    1. 从网格中删除所有列
    2. 将所需的列重新添加到网格中(这样可以防止在下一步中删除这些列)
    3. 删除网格数据源
    4. 在表单加载事件中设置网格的数据源。

    【讨论】:

      【解决方案3】:

      只需将您的生成代码移动到Form_Load 事件,如下所示:

      private void MainForm_Load(object sender, EventArgs e)
      {
          Me.MyDataGridView.DataMember = "DataMember";
          Me.MyDataGridView.DataSource = "DataSource";
      }
      

      【讨论】:

        【解决方案4】:

        我对此进行了几次实验。问题仅在这种情况下发生 如果你有一个 BaseForm 和 BindingSource , 如果你从这个 BaseForm 继承一个新的 InheritedForm, 或
        如果您在 InheritedForm 上有与 BindingSource 相关的附加绑定源(由 BaseForm 继承) 你有设计师错误。我没有设计器解决方案,但是如果您只是忽略并继续,当您再次构建项目时一切都会正常 否则您将不得不通过代码设置数据成员。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题

          Private WithEvents _model As MyModel
          

          删除了WithEvents,一切都恢复正常了

          Private _model As MyModel
          

          【讨论】:

            【解决方案6】:

            由于某种原因,在我手动打开表单的“设计器”之前,错误没有在错误窗口中注册。打开设计器任务后,我可以看到绑定错误等手动删除。

            造成这种情况的原因是我从项目中删除了数据源,但我猜它并没有自动删除它们背后的所有代码。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-18
              • 2015-09-26
              • 2014-08-03
              • 1970-01-01
              • 2013-01-25
              • 1970-01-01
              • 2010-10-08
              相关资源
              最近更新 更多