数据绑定原理
所谓数据绑定,就是把数据源中的数据提取出来,显示在窗体的各种控件上。用户可以通过这些控件查看和修改数据,这些修改会自动保存到数据源中。
Windows窗体可以利用两种类型的数据绑定:简单绑定和复杂绑定。
简单绑定指将一个控件绑定到单个数据元素(如数据集表中列的值)的能力。这是用于TextBox或Label等控件的典型绑定类型。
复杂绑定指将一个控件绑定到多个数据元素的能力,通常绑定到数据库的多条记录。如DataGrid就可以绑定到一个DataTable,一次显示多条记录和多个字段的值。
//将DataGrid绑定到DataTable
this.dataGrid1.DataSource = ds.Tables[0];
//获取数据绑定管理对象
cm = this.BindingContext[ds.Tables[0]];
//将文本框绑定到DataTable中的字段
this.txtName.DataBindings.Add("Text",ds.Table[0],"Name");
//this.txtName.DataBindings.Add("Text",ds,"table1.Name");
由以上代码可以看出,给DataGrid设置数据绑定是非常简单的,只需设置其DataSource属性即可。而给文本框设置数据绑定,需要向其DataBingdings集合增加一项,其格式为:
"要绑定的属性名",被绑定的DataTable对象,"DataTable中的字段名"。
ADO.NET数据绑定机制如图所示:
像文本框这样的控件可以绑定到字段上,这一事实本身包含以下信息:
要绑定的自身属性(如Text属性)
提供数据来源的对象(如DataTable)
绑定导航字符串
这些信息被封装起来,形成了Binding类。每个实现了数据绑定的控件都至少有一个Binding对象,表示它的绑定信息。
一个窗体上可能有多个控件(比如文本框)绑定到一个数据源,这就意味着存在多个Bingding对象。因此需要一个类来管理这些对象,这个类就是BindingManagerBase类。但这个类是抽象类,不能直接创建对象。类CurrencyManager直接继承自BindingManagerBase类,实现了基类的所有功能,可以直接使用。
一个窗体上不仅会有多个控件绑定到一个数据源,还可能出现多个控件绑定到多个数据源的情况,因此,需要一个类用于管理这些CurrencyManager对象,这就是BindingContext类的功能。每个其上有数据绑定的窗体对象都至少会有一个BindingContext对象。
容器控件(Form,GroupBox和TabControl)可以有自己的BindingContext对象。