没有合适的资源?快使用搜索试试~ 我知道了~
首页C# WINFORM 控件双向绑定少为人知的秘密
资源详情
资源评论
资源推荐

在做 winform 开发的时候常常会遇到控件绑定数据源来实现双向绑定更新的问题。
根据这么多年的经验现在整理一下供大家参考,有什么写错的地方请指教:
现提供两个简单封装的绑定方法
///<summary>
///将绑定数据源和控件绑定
///</summary>
///<paramname="ctl">控件</param>
///<paramname="propertyName">属性名称</param>
///<paramname="BindingSource">数据源</param>
///<paramname="eldName">绑定字段</param>
publicvoidSetBinding(System.Windows.Forms.Controlctl,stringpropertyName,objectBindingSource,stringeldName)
{
if(ctl.DataBindings[propertyName]!=null)ctl.DataBindings.Remove(ctl.DataBindings[propertyName]);
ctl.DataBindings.Add(propertyName,BindingSource,eldName,true,DataSourceUpdateMode.OnPropertyChanged);
}
///<summary>
///将绑定数据源和控件绑定,默认绑定 Text 属性
///</summary>
///<paramname="ctl">控件</param>
///<paramname="BindingSource">数据源</param>
///<paramname="eldName">绑定字段</param>
publicvoidSetBinding(System.Windows.Forms.Controlctl,objectBindingSource,stringeldName)
{
SetBinding(ctl,"Text",BindingSource,eldName);
}
用上这两个方法调用控件绑定则世界清静了许多。
但是这只是单向绑定而已,如代码指定的,当空间属性值发生变更的时候同步到数据源。
ctl.DataBindings.Add(propertyName,BindingSource,eldName,true,DataSourceUpdateMode.OnPropertyChanged);
这边一个 IsFormattingEnable 设置成了 true,这个属性必须引起重视。当控件的值是 objet 或者
decimal,int 等非 string 类型的时候这个属性有大用途,设置成 false 可能导致控件值丢失。
好了说说双向绑定的,我们用 DataSet,DataTable 等作为 Grid 的数据源的时候 Framework 的内部机制
是有进行双向绑定的。但是对于其他类似于 TextBox 的控件就不是那么的美了,经过大量的测试发现
TextBox 之类的控件用 DataView 作为数据源可实现双向绑定,即当数据源发生变更的时候控件的值会自
动发生变更。有 DataTable.DefaultView 可供调用


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论3