6

我有一个业务对象,它是子对象的组合。
我在 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 的属性

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

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

“在 DataSource 上找不到 DataMember 属性 ChildObject”

它失败了:

Me.MyDataGridView.DataSource = Me.GridBindingSource

奇怪的是,如果我删除 <System.Diagnostics.DebuggerStepThrough()> 然后当它失败时继续它很好???但它在运行时仍然失败。

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


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

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

4

6 回答 6

4

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

于 2011-06-07T07:26:54.150 回答
2

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

  1. 从网格中删除所有列
  2. 将所需的列添加回网格(这可以防止在下一步中删除列)
  3. 删除网格数据源
  4. 在表单加载事件中设置网格的数据源。
于 2009-10-28T21:33:28.363 回答
2

只需将您的生成代码移动到Form_Load这样的事件中:

private void MainForm_Load(object sender, EventArgs e)
{
    Me.MyDataGridView.DataMember = "DataMember";
    Me.MyDataGridView.DataSource = "DataSource";
}
于 2011-05-30T07:32:25.437 回答
1

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

这是有道理的:

BindingSourceB.Datasource = ParentObject.ChildList;

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

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

于 2009-02-26T01:43:34.110 回答
0

我有同样的问题

Private WithEvents _model As MyModel

删除了WithEvents,一切又开始工作了

Private _model As MyModel
于 2014-09-12T08:12:59.543 回答
0

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

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

于 2016-11-03T19:50:58.020 回答