我有一个业务对象,它是子对象的组合 我在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
奇怪的是,如果我删除< System.Diagnostics.DebuggerStepThrough()>然后当它失败时继续它是好的???但它在运行时仍然失败。
有没有人有任何想法可以指出我正确的方向?我通过谷歌搜索找到的最接近的是它可能与生成的设计器代码的顺序搞砸了。正在运行的代码将突然停止工作。
这个问题似乎来了又去。如果我在错误提出后继续,程序会愉快地继续,没有任何问题。可能是VS中的一个错误。但在运行时,错误仍然存在。
是什么导致了这个问题?如何阻止它发生?
答案 0 :(得分:4)
我尝试了几个实验。问题只发生在这种情况下
如果你有一个BaseForm和BindingSource,
如果从此BaseForm继承新的InheritedForm,
或
如果你在与BindingSource相关的InheritedForm上有额外的绑定源(由BaseForm继承)
你有设计师的错误。我没有设计师解决方案但是如果你只是忽略并继续,那么当你再次构建项目时,一切都会正常
或者你必须按代码设置数据。
答案 1 :(得分:2)
我发现的唯一解决方法是执行以下操作:
答案 2 :(得分:2)
只需将您的生成代码移动到Form_Load
这样的事件:
private void MainForm_Load(object sender, EventArgs e)
{
Me.MyDataGridView.DataMember = "DataMember";
Me.MyDataGridView.DataSource = "DataSource";
}
答案 3 :(得分:1)
Datamember应该是一个字符串,用于定义要显示的List的属性。这里没必要。
这是有道理的:
BindingSourceB.Datasource = ParentObject.ChildList;
如果绑定到网格,则不设置Datamember。只需设置Datasource,然后使用设计器配置网格。
GetType可以帮助设计师。在设计器属性中,您应该将BindingSourceB设置为ChildListObject类型,然后执行上面的操作。
答案 4 :(得分:0)
我遇到了同样的问题
Private WithEvents _model As MyModel
删除WithEvents
,所有内容再次正常运行
Private _model As MyModel
答案 5 :(得分:0)
出于某种原因,在我手动打开" Designer"为我的形式。一旦我打开设计器任务,我就可以看到绑定上的错误,以及手动删除。
导致这种情况的原因是我从我的项目中删除了数据源,但它并没有自动地删除它们背后的所有代码。