(二)C# 数据绑定
数据绑定是程序员只需做少量工作就可以用数据库中的数据填充Windows或Web控件的一种技术。
数据绑定有两点要求:数据源和要绑定数据的控件。数据源包括:数据库连接,对象,来自Web服务的数据。
1、 绑定到数据源(Windows应用程序)
可以将数据绑定到很多控件,但使用向导只能绑定到以下控件:
控件 |
说明 |
列表控件 |
包括ListBox和ComboBox,显示单行数据; |
DataGridView |
以类似表格的格式显示数据; |
BindingNavigator |
在表中的多条记录之间导航; |
详细视图 |
由基本控件(如TextBox和Label)组成,显示单行数据。 |
2、 BindingSource控件
BindingSource控件充当数据绑定控件和数据源之前的中介。它提供了一个通用接口,其中包含控件绑定到数据源时所需的所有功能。数据源可以设计成任何形式,只要它能够与BindingSource控件进行通信。这意味着可以使用非数据库数据源,或使用极其复杂的数据访问机制的自定义数据源。
3、 ASP.NET的数据绑定
和Windows应用程序一样,ASP.Net中的数据绑定依赖于连接,数据源和数据绑定控件。与Windows应用程序不同的是,ASP.NET中没有BindingSource控件作为数据源与数据绑定控件之间的中介,且数据绑定通常不使用类型化数据集,如果需要使用的话要求使用编程式数据访问而不是声明式数据绑定。
ASP.NET的数据源控件:
数据源控件 |
说明 |
SqlDataSource |
与SQL Server数据库交换数据; |
AccessDataSource |
连接到存储在Microsoft Acess数据库中的数据; |
ObjectDataSource |
暴露存储在对象中的数据,以便数据绑定; |
XmlDataSource |
绑定到存储在XML文件中的数据; |
SiteDataSource |
暴露Web应用程序的网站地图中的数据,从而能够动态地显示生成的导航控件、当前位置等。 |
ASP.NET数据显示控件:
控件 |
说明 |
GridView |
以表格形式显示多行数据 |
DataList |
显示多条记录,但与GridView不同。它按顺序显示每行中的所有信息。 |
Repeater |
其实际上是DataList的简化版。它提供只读视图,程序员完全可以控件输出数据的HTML。Repeater不提供多种布局,而是允许使用一组基本模板来控制其外观,然后只输出指定的HTML,还可以实现分页、数据编辑等功能。 |
FormView |
显示单行数据,支持分页。支持多种模板。在所有情况下,生成的FormView和DataList都很像。 |
DetailsView |
与FormView类似,也显示一条记录,支持自动分页,数据编辑。这两个控件的主要区别在于,DetailsView将一行数据显示为两列,左边为列名,右边为列值。 |
模板:
模板是将绑定数据显示为HTML的方式,由HTML和ASP.NET代码组成,是独立的可重用单元。对于数据绑定,模板包含的最重要的内容是数据绑表达式。数据绑定表达式是一个占位符,可动态地用于在模板的特定位置插入绑定的数据,还在ASP.NET控件的属性与数据列之间提供了双向链接。
最常用的模板是ItemTemplate。它用于DataList、Repeater和FormView等控件,将数据表中的一行显示为HTML。
完整的模板列表如下:
模板 |
说明 |
ItemTemplate |
控制列表控件中各个元素的输出,或只显示一个元素的控件的主元素显示区域; |
AlternatingItemTemplate |
替换ItemTemplate模板,用于选中的元素; |
SelectedItemTemplate |
替换ItemTemplate模板,用于选中的元素; |
EditItemTemplate |
替换ItemTemplate模板,用于编辑模式的元素; |
InsertItemTemplate |
添加新元素时使用该模板; |
HeaderTemplate |
包含要在列表元素前,或只显示一个元素的控件的主元素内容前生成的代码。数据绑定表达式不会绑定到这个模板中的元素; |
FooterTemplate |
包含要在列表元素后,或只显示一个元素的控件的主元素内容后生成的代码。数据绑定表达式不会绑定到这个模板中的元素; |
SeparateTemplate |
包含要在列表中每个元素前生成的HTML代码。数据绑定表达式不会绑定到这个模板中的元素; |
EmptyDataTemplate |
如果元素不包含数据,则生成这个模板的内容而不是ItemTemplate的内容。数据绑定表达式不会绑定到这个模板中的元素,因为这个元素是空的; |
PaperTemplate |
用于显示数据绑定控件的分页控件的HTML。其使用相当复杂。 |
下表列出数据绑定控件可使用的模板:
模板 |
GridView |
DataList |
Repeater |
FormView |
DetailsView |
ItemTemplate |
|
√ |
√ |
√ |
|
AlternatingItemTemplate |
|
√ |
√ |
|
|
SelectedItemTemplate |
|
√ |
|
|
|
EditItemTemplate |
|
√ |
|
√ |
|
InsertItemTemplate |
|
|
|
√ |
|
HeaderTemplate |
|
√ |
√ |
√ |
√ |
FooterTemplate |
|
√ |
√ |
√ |
√ |
SeparateTemplate |
|
√ |
√ |
|
|
EmptyDataTemplate |
√ |
|
|
√ |
√ |
PaperTemplate |
√ |
|
|
√ |
√ |