WinForm的数据绑定详解

本文介绍了两种数据绑定类型:简单绑定和复杂绑定。简单绑定用于建立控件属性与数据源对象之间的联系,而复杂绑定则用于处理二维或多维数据源的绑定情况。文章详细解释了如何创建这两种类型的绑定,并提供了具体示例。
背景知识了解:

1. DataRelation

这个类主要的方法有GetParentRow 和 GetChildRows . 使用这个类可以方便的得到主表中某一条记录对应的字表记录,或者相反。此类可以从ds.Relations或者dt.ChildRelations/ParentRelations得到。注意创建Relation时,最后一个参数为是否创建外键约束条件。默认为True。当绑定到一个DataRelation的时候,默认绑定到其GetChildRows

http://msdn.microsoft.com/zh-cn/library/d6s958d6%28v=VS.80%29.aspx


 

本文介绍两种绑定类型简单绑定(Simple Binding)和复杂绑定(Complex Binding)

简单绑定

它表示控件属性和数据源的一个对象之间的联系,通过Binding对象来表示一个绑定。每一个Control均有DataBindings属性,它是Binding类的集合。

创建绑定

要为某个对象的属性创建一个简单绑定,只需对其DataBindings属性调用Add方法。

创建一个Binding类需要如下参数:
"Text", 需要绑定的控件属性。
dtCustomers, 数据源。
"CustName", 导航路径。

该类用数据源和导航路径来确定绑定的目标。举几个例子就容易懂了。
数据源是DataSet,内有Customers表一张,现需要绑定到其Cust_Name字段上去,则导航路径为"Customers.Cust_Name",
数据源是List<TextBox>, 绑定到TextBox的Text属性,则导航路径为"Text";

Binding Class有两个重要事件.Parse/Format

获取BindingManagerBase

BindingManagerBase为抽象类,其所使用的实例化类为CurrencyManager/PropertyManager。当绑定到IList, IBindingList对象时会创建CurrencyManager对象。一个CurrencyManager对象,保存了当前数据集中游标的位置,也即是Position属性。不同控件可以共用一个CurrencyManager对象。

(this 为CustNameTextBox所在的form)

若绑定添加方式为

则获取方式为

若绑定添加的方式为

则获取方式为

注意获取和添加绑定的方法必须保持一致。

复杂绑定

绑定的对象是二维或多更多。比如Grid的绑定。此类绑定通常是通过设置其DataSource和DataMember属性来实现。DataMember属性也即是上文所指的导航路径。与上种绑定类型相比,其导航路径的写法更为多样。举例如下:

数据源是DataSet,内有Customers(CustID, CustName), Order(CustID, OrderDate, OrderQuantity),以及DataRelation CustToOrder(Customers.CustID => Order.CustID),绑定Grid到所有的Order则写法可以为:

绑定到某个Customer的所有Order则为:

此时若需要设置类似的Format 和Parse则一般通过绑定的控件的提供的功能来实现。

 

获取BindingManagerBase

若绑定方式为

获取表Customers的BindingManagerBase的方法为:

获取当前Customer的下一个Order记录的方法为:

另有杂项的How To:

1. 如何确保同一数据源的多个对象之间的同步。
可以通过使用BindingSource类作为数据源,以得到更多的控制。http://msdn.microsoft.com/zh-cn/library/ms404299%28VS.85%29.aspx

2. 如何给自定义对象添加数据绑定功能。

3. 如何为不同控件指定不同的BindingManagerBase。
为需要独立Position控制的控件创建自己的BindingContext对象,并赋值给这个控件的BindingContext属性,然后在添加绑定即可。http://msdn.microsoft.com/zh-cn/library/dek6b6k3(v=VS.90).aspx

4. 如何自定义可绑定的数据源。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值