C# 如何验证控制';s的数据绑定是否与绑定源匹配?

C# 如何验证控制';s的数据绑定是否与绑定源匹配?,c#,winforms,data-binding,bindingsource,C#,Winforms,Data Binding,Bindingsource,我有复杂的表单,其中控件位于各种选项卡和面板上。这些表单使用bindingsource将其控件绑定到数据源 在开发过程中,可能会出现数据源的成员已重命名,但窗体控件未重命名的情况 由于加载表单时不会引发异常,是否有方法循环bindingsource的数据源成员并将其与控件的数据绑定值进行比较 如本节所述,必须特别注意隐藏控件 这项检查应该在哪里进行?在构造器中或OnLoad?(至少应在初始化组件之后发生,因为bindingsource的数据源,即typeof(myObject)在此方法中设置)。

我有复杂的表单,其中控件位于各种选项卡和面板上。这些表单使用bindingsource将其控件绑定到数据源

在开发过程中,可能会出现数据源的成员已重命名,但窗体控件未重命名的情况

由于加载表单时不会引发异常,是否有方法循环bindingsource的数据源成员并将其与控件的数据绑定值进行比较

如本节所述,必须特别注意隐藏控件


这项检查应该在哪里进行?在构造器中或
OnLoad
?(至少应在初始化组件之后发生,因为bindingsource的数据源,即typeof(myObject)在此方法中设置)。

绑定对象具有事件bindingcomplete,它可以帮助您获取绑定操作(读写)的状态(成功错误)

不要忘记在数据绑定上启用格式设置。没有这一点,这项活动就不会举行

由于数据绑定的目的是将业务对象属性“链接”到图形控件属性,因此隐藏控件在控件可见之前不会“读取”该值。您应该直接访问BusinessDataboundObject,而不是读取UI控件的属性


用Try-Catch包装您的负载也是一件好事(在任何情况下),因为Winforms都会默默地捕获在此事件中抛出的异常。这可以使表单仅用一半的“加载过程代码”就可以加载和可见。

绑定对象具有事件bindingcomplete,它可以帮助您获得绑定操作(读写)的状态(成功错误)

不要忘记在数据绑定上启用格式设置。没有这一点,这项活动就不会举行

由于数据绑定的目的是将业务对象属性“链接”到图形控件属性,因此隐藏控件在控件可见之前不会“读取”该值。您应该直接访问BusinessDataboundObject,而不是读取UI控件的属性



用Try-Catch包装您的负载也是一件好事(在任何情况下),因为Winforms都会默默地捕获在此事件中抛出的异常。这可以使表单仅用一半的“加载过程代码”加载和可见。

当数据绑定到acontrol的属性时,如果该属性在数据源中不存在,将引发异常:
无法绑定到数据源上的属性或列XXXXXX。
@RezaAghaei未引发异常。已引发异常,但未引发异常-检查您的异常设置。然后在某些情况下,如果在
Load
eventhandler中抛出异常,它将被吞咽-在这种情况下,您可以使用
Try包装
Load
事件处理程序。。catch
@Fabio应该抛出什么异常?您可以在第一条注释中看到异常。它是
ArgumentException
。当数据绑定到acontrol的属性时,如果该属性在数据源中不存在,将引发异常:
无法绑定到数据源上的属性或列XXXXXX。
@RezaAghaei没有引发异常。引发了异常,但没有引发异常-检查您的异常设置。然后在某些情况下,如果在
Load
eventhandler中抛出异常,它将被吞咽-在这种情况下,您可以使用
Try包装
Load
事件处理程序。。catch
@Fabio应该抛出什么异常?您可以在第一条注释中看到异常。它是
ArgumentException
。您可以简单地测试数据绑定到无效属性:
this.DataBindings.Add(new System.Windows.Forms.binding(“Text”,this,“XXXXXX”,true))异常将引发:System.ArgumentException:无法绑定到数据源上的属性或列XXXXXX。参数名称:DataMembers如果在初始化IList数据对象之前创建绑定(使用designer by example?),或者如果在初始化之后更改了源的类型,该怎么办。如果我有良好的内存,在这种情况下不会抛出异常。我已将
ArgumentException
设置为抛出异常。我还在表单的construtor和OnLoad方法中添加了
try…catch
。仍然没有抛出异常。这没有任何区别。测试很简单,例如
varbs=newbindingsource();bs.数据源=类型(形式);这个.DataBindings.Add(new System.Windows.Forms.Binding(“Text”,bs,“XXXXXX”,true))如您在示例中所见,我们没有将预期对象的实例(此处为
表单
)传递给绑定源。@RezaAghaei我已在表单的构造函数中添加了您的测试,但没有使用
try…catch
。没有引发异常!!您可以简单地测试与无效属性的数据绑定:
this.DataBindings.Add(new System.Windows.Forms.binding(“Text”,this,“XXXXXX”,true))异常将引发:System.ArgumentException:无法绑定到数据源上的属性或列XXXXXX。参数名称:DataMembers如果在初始化IList数据对象之前创建绑定(使用designer by example?),或者如果在初始化之后更改了源的类型,该怎么办。如果我有良好的内存,在这种情况下不会抛出异常。我已将
ArgumentException
设置为抛出异常。我还在表单的construtor和OnLoad方法中添加了
try…catch
。仍然没有抛出异常。这没有任何区别。测试很简单,例如
varbs=newbindingsource();bs.数据源=类型(形式);这个.DataBindings.Add(new System.Windows.Forms.Binding(“Text”,bs,“XXXXXX”,true))如您在示例中所见,我们没有将预期对象的实例(此处为
表单
)传递给绑定源。@RezaAghaei我已在表单的构造函数中添加了您的测试,但没有使用
try…catch
。不