当前位置:首页 >> IT/计算机 >>

第10章 asp.net 数据绑定


ASP.NET程序设计教程

第10章 数据绑定技术原理

北京理工大学计算机学院 金旭亮

主要内容
10.1 数据绑定原理 ? 10.2 GridView基础知识 ? 10.3 GridView应用实例 ? 10.4 数据绑定控件的组合使用
?

2

10.1 数据绑定原理
只有知其所以然才能知其然

引例:直观了解数据绑定
?

现场编程展示(参考示例:UseDataBind)

4

数据绑定的层次结构
数据绑定控件 提供显示和编辑数据的 可视 化界面

DataSourceView
IDataSource

数据源控件
调用

提供对数据的访问接口: 增、删、改、查

ADO.NET 存取
数据库

与数据库交互,完成信息 的增、删、改、查工作。

信息的存放地

5

常用的数据绑定控件
控件名称 说明 GridView 以表格的方式显示和编辑数据 DetailsView 一次显示、编辑、插入或删除一条记录。默认情况 下,DetailsView 控件将记录的每个字段显示在它自 己的一行内 FormView FormView控件与DetailsView控件相似,一次也只能 显示或编辑一条记录。FormView需要给其设定一个 模板 DataList 控件可以用某种用户指定的格式来显示数据 ( 比 如 分列显示),这种格式由模板和样式进行定义

Repeater

ListView

Repeater控件没有包含内置的布局或样式,需要由 Web开发者指定所有的用于显示数据的内部控件和 显示样式 ASP.NET 3.5新增,以嵌套容器模板和占位符的方式 提供灵活的数据显示模式
6

常用的数据源控件
SqlDataSource 可以连接到 ADO.NET 支持的任何 SQL 数据库

AccessDataSource
ObjectDataSource XmlDataSource SitemapDataSource

连接到使用 Microsoft Office 创建的 Access 数据 库 连接到应用程序的 Bin 或 App_Code 目录中的中 间层业务对象或数据集
连接到 XML 文件

LINQDataSource

连接到此应用程序的站点导航树(要求应用程 序根目录处有一个有效的站点地图文件,默认 的文件名为“Web.sitemap”),站点地图文件其 实也是一个XML文件 .NET 3.0新增,可以访问各种类型的数据,包括 数据库和XML文件。与C#/VB.NET等.NET语言 直接集成
7

多种可绑定的数据对象
?

?

除了绑定到数据源这种具有很强功能的对象之外,数 据绑定控件还可以绑定到最小实现了IEnumerable接口 的集合对象(如数组/HashTable/List<T>)。 另外,通过使用数据绑定表达式,可以将一些数据绑 定控件直接与某个函数或属性进行绑定。

8

数据绑定的三种实现方式:
?

?

?

将数据绑定控件的DataSourceID设定为数据源控件, 数据绑定控件即可充分利用数据源控件的功能实现对 数据的增删改查。这称为“自动数据绑定”。 也可以不使用DataSourceID,而是直接将数据源赋值 给数据绑定控件的DataSource属性,然后再调用数据 绑定控件的DataBind()方法实现“手工数据绑定”。 或者直接在页面中放置绑定表达式,然后在Page_Load 中调用页面类的DataBind()方法实现数据绑定。

9

数据绑定表达式
第一步:设定数据表达式 <%# 数据绑定表达式 %> ? 第二步:执行Page类中的Bind()方法。 ? Demo:UseDataBind(DataBindingExpression.aspx)
?

重要编程提示:

直接在页面中嵌入C#代码的方法:

<%= C#代码 %>
无须调用Page.Bind()方法,上述代码总是执行。

10

理解“数据绑定模板”
?

?

?

由于要显示的数据通常包含多条结构类似的记录,因 此,经常使用“模板(Template)”来指定单条记录 的显示格式,然后,数据绑定控件自动将这一定义好 的模板应用于所有要显示的记录。 可以针对不同的场景定义不同的模板,例如,可为浏 览状态显示一个只读的模板(通常用Label来表达信 息),然后为编辑状态显示另一个模板(通常用 TextBox来向用户提供修改信息的手段)。 大多数数据绑定控件都提供了相应的方法在不同的状 态间切换(如从浏览切换到编辑状态),并会自动加 载相应的模板,与此同时,还会触发相应的事件。

11

在数据绑定模板中绑定数据(1)
?

当一个ASP.NET控件位于一个数据绑定模板中时,可 以使用Eval()方法将其的某个属性与数据源中当前数 据对象的某个属性相绑定。
<ItemTemplate> ClientID: <asp:Label ID="ClientIDLabel" runat="server" Text='<%# Eval("ClientID") %>' /> </ItemTemplate>

?

Eval方法提供了一个单向的只读的数据值。这就是说,数据 是从“数据源”对象单向传送给模板中的控件,没有办法修 改数据源对象中的数据。

12

在数据绑定模板中绑定数据(2)
?

当需要修改数据源中的数据时,通常采用 Bind()方法实现这一功能:
<EditItemTemplate> ClientName: <asp:TextBox ID="ClientNameTextBox" runat="server" Text='<%# Bind("ClientName") %>' /> </EditItemTemplate>

?

当使用Bind方法时,用户所做的修改会被传送回数据源控件以 实现更新。

13

数据绑定实例分析
?

Demo: UseDataBind(UseEvalAndBind.aspx)

浏览

修改

示例要点: 使用FormView控件绑定到 SQLDataSource,定义其编辑 和插入模板。

删除

14

自动绑定 VS 手工绑定
ASP.NET提供的自动数据绑定机制虽然很自 动化,几乎不用编码就可以完成许多功能, 然而,在实际项目中为了实现严格的分层架 构和保证程序的灵活性与可控性,往往不使 用自动绑定,而是手工编程实现数据绑定。 ? 下面将以最复杂也是最常用的GridView为例, 深入介绍数据绑定控件的使用方法。
?

15

10.2 GridView基础知识
以点带面,举一反三

形成GridView的全局观(1)
?

GridView以表格的方式显示数据。
TableCell代表一个单元格,这是一个控件容器,其中可以放 置各种ASP.NET控件。 GridViewRow对象的Cells集合代表这 一行的所有单元格

GridViewRow对象代表GridView控件中的一行,GridView 的Rows属性代表当前显示在页面上所有GridViewRow对 象的集合
17

形成GridView的全局观(2)
?
?

?

与GridView绑定的数据都具有二维表的性质。 若绑定的是DataTable,则每个GridView-Row对象负 责显示一个DataRow,而每个TableCell则负责显示此 DataRow中特定字段的值。 若绑定的是List<T>,每个GridViewRow对象负责显 示一个T类型的对象,每个TableCell则负责显示此对 象的特定属性的值。

18

数据绑定控件GridView中的列(1)
? ?

GridView中的列可以用不同方式显示数据。 GridView列对象模型
DataControlField

BoundField

TemplateField

HyperLinkField

ButtonFieldBase ImageField

CheckBoxField

AutoGeneratedField

ButtonField

CommandField

19

数据绑定控件GridView中的列(2)
? ? ? ? ?

?

BoundedField:直接与数据对象的某个“列/属性”绑定,以 文本形式显示其值。 HyperLinkField:根据数据对象某个列(属性)的值生成一个 超链接元素(<a>)。 ImageField:根据数据对象某个列(属性)的值生成一个 <img>元素,显示一张图片 ButtonField:显示一个按钮。 CommandField:其实就是拥有特定Command-Name的 ButtonField,完成通用的“编辑”、“删除”和“选择”功能。 TemplateField:模板列,用于自定义GridView的显示界面, 非常灵活与有用。

20

图示GridView的列与行
header

CommandField

BoundedField

footer
21

Gridview的重要事件
? 1. 2. 3. 4. 5. 6.

GridView及GridViewRow会触发一系列的事件,应用好这些事 件非常关键,常用的有以下几个: RowCommand :单击每行中的按钮(ButtonField)时触发, 可通过CommandName区分开是哪个按钮被点击。 RowDataBound :给每行绑定数据时发生,通常用它来设置模 板列中特定控件的属性。 RowDeleting :删除一行时发生,可以取消删除。 RowUpdating :更新一行数据时发生,可以取消更新。 SelectedIndexChanged :选择的行发生改变时发生。 PageIndexChanging:单击分页按钮时发生。

22

访问基础数据
? ?

?

使用GridViewRow对象 的DataItem 属性,可以访问 基础数据对象的属性。 GridView控件的DataKeyNames属性指定主键,每一 行 GridViewRow 会 生 成 一 个 DataKey 对 象 , 整 个 Gridview 控 件 会 有 一 个 DataKey 对 象 的 集 合 ( 用 DataKeys属性代表)。 可以通过Gridview的SelectedDataKey方法获取当前选 中行的DataKey对象,然后再检索键值。

23

掌握GridView编程技巧的关键
? ?

?

牢记:GridView只负责数据的显示,它不管数据的 增删改查! 记住GridView对象模型: 行由哪个对象表达,列有几种类型 了解GridView的常用事件,知道这些事件可由哪些 对象触发,高度注意每种事件参数中包含的信息。

24

10.3 GridView应用实例

本节示例网站GridViewDemo说明
?
?

? ?

为了清晰地展示出GridView的使用技巧,实例使用手工 数据绑定方式。 绑定的数据来自于Clients表,对应的类为ClientInfo, GridView 绑 定 到 List<ClientInfo> 集 合 对 象 。 ClientInfoAccessObj 对 象 包 含 一 系 列 的 方 法 , 使 用 ADO.NET技术从数据库中提取与更新数据。 上述两个类均放置于示例网站的App_Code文件夹下。 这种网站架构也用于本系列的大实例HappyBookShop中。

26

实例1:自定义显示列和列标题
?
?

可以让GridView只显示特定的列,并且指定列的标题。 Demo: CustomizeColumns.aspx

27

实例1要点:

28

从这个例子中可以知道
? ? ?

GridView会根据绑定的数据源自动创建列,这是通 过反射实现的。 每个列都是一种特定类型的DataControlField,可以 通过设置它的一些属性来定制它的外观和行为。 对于BoundedField,设定它的DataField,可以显示它 所绑定的数据对象特定属性的值。

29

实例2:自定义分页
?

?

当绑定到SqlDataSource时,GridView的分页功能是自动 实现的,不需要编写一行代码。然而,当绑定到功能较 少的数据源,如List<T>时,就必须自己定义分页代码 了,另外,分页的格式往往也希望能自定义。 Demo: GridViewPaging.aspx
每页显示5条记录

自定义分页按钮格式

30

实例2要点:
? ? ?

设置GridView的AllowPaging="True"; PageSize="5"; 在GridView的PageIndexChanging事件中,设置其PageIndex为新页, 然后重新绑定数据实现分页。 设置GridView的PagerSettings和PagerStyle属性自定义分页按钮。

31

从这个例子中可以知道
?

?

?

分页时GridView会触发PageIndexChanging事件,相应 的,分页完成时会触发PageIndexChanged事件。在 GridView中有不少事件是这样配对的。 一般来说,在“-ing”事件中,其参数e包含了重要 的信息,例如分页事件中的e.NewPageIndex属性代 表了新页码。而设置e.Cancel = true则可以取消这一 操作。 当需要修改GridView显示的数据时(比如跳转到新 的一页),需要重新绑定数据。

32

GridView自定义分页
?

?

GridView具备自动分页的特性。这就是说,只要将 绑定到一个数据源,并设置其每页显示的行数和要 显示的页码,GridView会自动从数据源中提取数据 (从开头第一页到要显示的页,然后丢弃前面的N- 1页,只显示第N页)。对于List<T>,由于其实现了 IList接口,因此也具备自动分页的特性。 可以通过每次只提取所需要的数据来提升性能,这 时需要人工编写代码来完成数据的提取工作,然后 再将数据绑定到GridView。这种方法称为“自定义 分页”。为达到最佳性能,往往还禁用GridView的 视图状态( EnableViewState =false),完全用其他 标准的ASP.NET控件来实现分页功能。
33

实例2延伸:GridView自定义分页
?

Demo: GridViewCustomizePaging.aspx

(1)查看一下源文件,禁用ViewState可以减少多少数据量的传输! (2)GridView内置对于分页界面的定制,只需添加一个数据分页 模板PagerTemplate 就可以实现同这个示例一样的功能。可通过查 询MSDN实现示例的这种导航方式。
34

实例3:排序
?

GridViewSort.aspx

即可以单击按钮,也可 以单击列标题进行排序

支持多列排序

35

实例3要点:
?
? ?

?

响应Sorting事件,在此事件中编码进行数据绑定。 利用委托实现对泛型数组中的对象进行排序。 GridView的一个基本编程方法: 给GridView什么样的数据,它就忠实地呈现什么样 的数据。 自我拓展训练: 本示例是升序排列,如何让其也支持降序排列?

36

实例4:记录的删除
?

GridViewDelete.aspx

37

实例4要点
ButtonField可以绑定到数据源以显示不同的文字,单 击它GridView会触发RowCommand事件。此事件参 数e有以下重要属性: 1. e.CommandName属性表明哪个按钮被单击。 2. e.CommandArgument属性表明是哪一行,这个值是 由GridView自动填充的。 3. e.CommandSource则代表了GridView自身。
?

38

GridView预定义的CommandName
? 1. 2. 3. 4. 5. 6. 7. ?

当一个ButtonField的CommandName是以下预定义值 时,相应的事件被触发: Cancel:触发“取消”事件。 Delete:触发“删除”事件 Edit :触发“编辑”事件 Page:触发“分页”事件 Select :触发“选择”事件 Sort :触发“排序”事件 Update :触发“更新”事件 CommandField是特殊的ButtonField,其 CommandName是上述预定义值之一。
39

数据主键值的获取
当需要从数据库删除记录时,需要知道要删除记录的主 键。 ? GridView有一个DataKeyNames属性,进行绑定前必须将 其设置为主键值名。 ? 当需要获取主键时,根据指定行的索引,从GridView的 “DataKeys[索引].Value”得到主键值。 ? 提醒:这是编程中的一个关键点!
?

40

实例5:查找
?

GridViewFind.aspx

41

实例5分析
?

?

本实例再次采用了以下这种典型的编程方法: 从数据库中取出需要的数据传送给GridView。 对于分页:则利用了GridView的自动分页功能。通 过设置其PageIndex实现分页。

42

实例6:选中并编辑记录
?

Demo:GridViewEdit.aspx

43

实例6的要点
?

? ?

使用GridView的“选择”功能,在GridView的 SelectedIndexChanging事件中显示一个编辑面板供用 户修改记录。此面板完全是自定义的。 SelectIndexChanging/SelectIndexChanged事件在主从 表显示中很有用。 注意示例程序是如何取出选中记录的当前值的。 拓展训练: 还可以利用GridView内部集成的编辑功能让其进入 编辑状态,在RowEditing中完成显示编辑面板的任务。 触发RowEditing事件的方法在示例网页中有说明,同 学们课后需完成这一作业。
44

txtName.Text = GridView1.Rows[e.NewSelectedIndex].Cells[1].Text;
?

GridView的模板列简介
?

在GridView的模板列中,可以添加各种Web控件, 并通过编写代码实现特定的数据处理工作,然后再 将结果显示在相应的控件中。

添加模板列

45

实例7:模板列的应用——批处理删除
一次选取多条记录进行统一处理。 ? Demo:BatchDelete.aspx
?

46

实例7要点汇总
? ?

? ? ?

在模板中可以放置任意一种ASP.NET控件,从而使其成为最灵 活的一种数据绑定方式,为广大开发者所喜用。 当需要访问特定行中的模板列中的某个特定控件时,使用 GridViewRow对象的FindControl("控件ID")方法,这是一个非常 重要的编程方法。 GridView的Rows集合存放的是当前显示在页面上的行对象的集 合。 注意要使用视图状态保存当前页码,以便用户在删除记录后仍 能回到上次工作的地方。 GridView的DataKeyNames不要忘了设置,否则取不出主键。

47

10.4 数据绑定控件的组合使用
示例网站:DataControlsDemo

实例1: 嵌套控件
? ?

在GridView模板列中嵌入其他的数据绑定控件:出版社 和书名 Demo:EmbodiedDataBindControl.aspx

49

实例1分析
DataAccessObj类负责向网页提供数据源。 ? 在GridView中创建一个模板列,其中嵌套一个 BulletedList控件。 ? GridView绑定到DataTable,在GridView的 RowDataBound事件中绑定嵌套的数据控件。 ? 提示: 高度注意RowDataBound事件中代码的写法: (1)如何提取出当前行所对应的数据对象? (2)如何查找模板列中的特定控件? (3)为何要判定行的类型?
?

50

实例2:数据筛选与合计
? ?

DropDownList与GridView配合实现数据筛选。 Demo:DropDownListAndGridView.aspx

51

实例2要点分析
? ?

DropDownList可以绑定到List<T>,注意它的 DataTextField和 DataValueField两个属性。 在GridView的RowDataBound中完成合计工作,并 将结果动态地添加到页面上。注意其实现方法。

52

实例3:主从表
?

MasterDetail.aspx

?

主表显示书,从表显示读者评论
53

实例3 分析
? ?

主表显示一个“选择”按钮,这是使用GridView内 置的选择功能实现的。 在主表的SelectedIndexChanging事件中取出选中行的 主键,根据主键到数据库中提取记录,再绑定到从 表。

54


相关文章:
ASPNET 2.0快速入门(9):ASPNET 2.0 数据绑定高级技巧
ASPNET 2.0快速入门(9):ASPNET 2.0 数据绑定高级技巧_计算机软件及应用_IT/计算机_专业资料。ASP.NET 2.0 快速入门(9):ASP.NET 2.0 数据绑定高级技巧 ---...
ASP.NET教程第四讲 数据绑定 DataBind
ASP.NET教程第四讲 数据绑定 DataBind_工学_高等教育_教育专区。ASP.NET教程ASP...第10章 asp.net 数据绑定... 54页 免费 ASP.NET教程第五讲 数据... 6页...
ASP_NET中多个DropDownList控件的动态数据绑定
ASP_NET中多个DropDownList控件的动态数据绑定_计算机软件及应用_IT/计算机_专业资料...(ASP.net课件)第八章 ... 22页 免费 ASP.NET动态数据支持 14页 1下载券...
c#aspnet电子病历管理系统
...10 第 3 章 数据库设计 ...11 3.1 系统的基本目标 .....与传统的 Active Server Pages (ASP)不同,ASP.NET 能利用早期绑定、实时(JIT)编译、本机优化...
第8章_数据源控件(修改增加内容了)
第10章 asp.net 数据绑定... 54页 免费 DataGridView控件添加数... 2页 1...第八章 数据源控件数据访问的关键在于安全和高效。ASP.NET 2.0 在提高数据访问...
asp net复习题
容量不同 (26)默认情况下,Session 状态的有效时间是(D) A.30 秒 B.10 ...ASP.NET 支持服务器端控件的数据绑定,数据绑定表达式的语法是?(写过程或代码) ...
ASP_NET简答题整理
二者本质上是一个东西 10.简述 ASP 的工作原理。 1) 用户调出站点内容,默认...29.ASP.NET 的关键技术有哪些? 事件驱动;代码隐藏技术;数据绑定技术;数据访问...
ASPNET课后习题答案
SiteMapDataSource 绑定到站点地图数据, 并基于站点地图层次结构中指定的 起始节点,...aspnet题库 7页 1下载券 第6章课后习题答案 暂无评价 1页 免费喜欢...
ASP.NET教程第五讲 数据库的操作
ASP.NET教程第五讲 数据库的操作_IT/计算机_专业资料...在定制显示中,还有一种比较使用的方法,而不用绑定 ...AllowPaging="True" 是否支持分页 PageSize="10" ...
第10章NET MVC基础习题解答
第10 章 ASP.NET MVC 基础 第 10 章 参考解答 1.简要叙述 MVC 的优点和适用...控制器则负责完成各种功 能(比如对数据库的读写) ,以及功能与操作界面之间的...
更多相关标签: