频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

10.1.7 为FormView控件实现数据绑定

作者: [美] Thiru Thangarathinam 著/郝刚、严治国、罗宇波. 出处:人民邮电出版社  2008-05-11 15:37    砖    好    评论   进入论坛
阅读提示:《ASP.NET 2.0数据库高级编程》第10章主要介绍的是高级数据源和数据绑定控件,本节将为您讲述的是为FormView控件实现数据绑定。

10.1.7  为FormView控件实现数据绑定

本章最近几节和前面的章节已经讲解了GridView和DetailsView控件的部分高级功能。与DetailsView控件类似的还有FormView控件,可以将该控件视为DetailsView的模板化版本。FormView控件每次呈现一条记录,该记录从相关数据源中获取数据,同时提供记录间实现导航的分页按钮。与DetailsView控件不同,FormView不使用数据控件字段,而是利用模板定义呈现的每一项。FormView可支持数据源提供的任何基本操作。

注意,FormView要求开发人员使用模板定义FormView中的所有内容,而不仅仅是需要修改的部分。FormView没有内置呈现引擎,受限于所定义的模板输出。

FormView控件包括多个属性,读者已经在DetailsView控件中看到了这些属性。FormView和DetailsView之间的不同仅在于模板和相关的样式属性。

1.FormView控件支持的模板

FormView控件的输出全部基于模板。这意味着在任何细微之处都需要设置模板。表10-1列举了控件支持的模板。

表10-1

   

   

EditItemTemplate

当升级现有记录时使用该模板

InsertItemTemplate

当创建新记录时使用该模板

ItemTemplate

仅当为查看现有记录时使用该模板

在只读浏览模式下,可使用ItemTemplate来定义控件的布局。可使用EditItemTemplate来编辑当前记录的内容,使用InsertItemTemplate来添加新记录。除了这些模板之外,FormView控件的模板与DetailsView提供的模板设置相同——也就是HeaderTemplate、FooterTemplate和其他模板。

2.FormView控件的操作支持

由于控件的用户界面主要由页面作者来定义,所以不能期望FormView控件理解在特定按钮上的单击行为。基于这个原因,FormView提供了一些公共的可调用方法,以便触发常见行为,表10-2列举了这些方法。

表10-2

   

   

ChangeMode

修改控件工作模式,从当前模式修改为FormViewMode类型中定义的模板——ReadOnlyEdit或者Insert

DeleteItem

从数据源中删除FormView控件显示的当前记录

InsertItem

向数据源插入当前记录。必须在FormView控件处于插入模式时调用该方法;否则,将抛出异常

UpdateItem

更新数据源中的当前记录。必须在FormView控件处于编辑模式时调用该方法;否则,将抛出异常

InsertItem和UpdateItem需要一个布尔值来指示是否应该执行输入验证。在上下文中,简单执行验证意味着可以在模板中调用任何验证控件。如果没有验证控件,则不执行任何形式的验证。InsertItem和UpdateItem方法设计用于处理模板中控件引发的基本操作。不必将记录、值或者记录的关键值传递给方法以便进行插入、更新或者删除操作。FormView控件了解如何获取内部信息,采取与DetailsView相同的方法。

DeleteItem、InsertItem和UpdateItem方法可使开发人员自定义删除、插入和编辑的用户界面,同时将其与标准的ASP.NET控件数据绑定模型关联起来。在DetailsView控件中,这种关联是隐式的,因为用户界面是相对静态和固定的。在FormView控件中,相同的关联必须显式地在自定义用户界面中定义。

3.将数据绑定到FormView控件

既然读者已经了解了FormView控件支持的模板和操作,本节将说明如何在ASP.NET Web页面中使用模板配置和使用FormView。如前文所述,模板中必须包括完成任务所需要的一切,包括用户界面元素和命令按钮。

FormView控件的最终输出是包括页眉和页脚行的HTML表格形式,还要加上可选的分页行。与DetailsView类似,FormView控件为页眉和页脚提供了模板。但是与DetailsView不同,FormView不提供简单和方便的文本属性,例如HeaderText和FooterText。

以下代码片段显示了页面中FormView内嵌的典型代码。


<asp:FormView ID="deptView" runat="server" DataSourceID="deptSource"......>
<ItemTemplate>...</ItemTemplate>
<EditItemTemplate>...</EditItemTemplate>
<InsertItemTemplate>...</InsertItemTemplate>
</asp:FormView>

示例10-9列举了ASP.NET页面完整代码,该页面包括一个用于显示AdventureWorks数据库中部门信息的FormView控件。

示例10-9:使用FormView控件实现数据绑定

<%@ Page Language="C#" %>
<%@ Page Language="C#" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Data Binding with FormView Control</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FormView runat="server" ID="deptView" DataKeyNames="DepartmentID"
DataSourceID="deptSource" AllowPaging="true">
<ItemTemplate>
<table style="border: solid 1px black;" width="100%">
<tr>
<td bgcolor="yellow" width="50px" align="center">
<b><%# Eval("DepartmentID") %></b>
</td>
</tr>
<tr>
<td bgcolor="lightyellow">
<b><%# Eval("Name") %></b>
</td>
</tr>
<tr>
<td bgcolor="lightblue">
<b><%# Eval("GroupName") %></b>
</td>
</tr>
<tr>
<td bgcolor="lightcyan">
<b><%# Eval("ModifiedDate") %></b>
</td>
</tr>
</table>
<br/>
<asp:Button ID="btnEdit" runat="server"
CommandName="Edit" Text="Edit" />
</ItemTemplate>
</asp:FormView>
<asp:SqlDataSource ID="deptSource" Runat="server"
SelectCommandType="Text" SelectCommand="Select DepartmentID, Name,
GroupName, ModifiedDate from HumanResources.Department"
ConnectionString="<%$ConnectionStrings:AdventureWorks%>">
</asp:SqlDataSource>
</div>
</form>
</body>
</html>

ItemTemplate中所有标记都呈现在表的单元格中。正如所提到的,FormView的整体布局是表格。添加Edit按钮使用了典型的按钮,该按钮的命令名称是Edit。该命令名称使得FormView自动从只读模式切换为编辑模式,同时显示编辑模板定义的内容(如果定义了编辑模板)。可以使用包括任何命令名称和标题的按钮控件。如果不要求自动改变模式,可以调用ChangeMode和其他FormView控件支持的方法。


图10-8显示了生成的输出。

 
图10-8

在示例10-9中,Eval方法实现了显示数据。Eval方法具有两种功能相同的格式,其中之一在示例中已经实现。可以使用的另一种格式如下所示:

<%# DataBinder.Eval(Container.DataItem, "DepartmentID")%><%# DataBinder.Eval(Container.DataItem, "DepartmentID")%>

DataBinder类的Eval静态方法在运行时使用反射来解析和计算数据绑定表达式中的对象。使用发布的ASP.NET 2.0时,可以使用Eval方法的简化版本(如示例10-9中所示)。该方法将数据绑定表达式设置为输入参数。正如所期望的,新发布的Eval方法停止了对DataBinder.Eval方法的调用。

Eval方法仅用于只读的单向数据绑定情况。为了实现真正的双向数据绑定,需要扩展Eval方法。这种扩展就是Bind方法,下一节将介绍该方法。

4.使用FormView控件编辑数据

为了编辑绑定记录,可利用EditItemTemplate属性定义编辑模板。在这个模板中可以放置包括验证控件在内的任何输入控件集合。不要仅限于使用文本框控件,可以使用任何类型控件来创建用户界面。为了获取更新绑定记录的值,需要使用新引入的Bind方法。

以下代码片段列举了一个示例,该示例中的TextBox控件绑定了数据源的Name属性。这是Item和EditItem模板之间的主要不同点。

 <asp:TextBox runat="server" Text='<%# Bind("Name") %>' />

Bind方法将绑定控件属性值存储到FormView自动获取值的集合中,同时使用这些值组成编辑命令的参数列表。传递给Bind方法的参数必须与更新命令或方法的参数名称匹配,或者与用作更新方法参数的类型属性匹配。如果没有发现匹配参数,则抛出异常。

示例10-10列举了一个编辑模板的示例。该模板包括一些标准文本框控件。

示例10-10:使用FormView控件编辑数据

<EditItemTemplate>
<table style="border:solid 1px black;" width="100%">
<tr>
<td bgcolor="yellow" align="center">
<b><%# Eval("DepartmentID") %></b>
</td>
</tr>
</table>
<table style="font-family:Verdana;font-size:8pt;">
<tr>
<td><b>Department Name</b></td>
<td><asp:textbox ID="txtName" runat="server" text='<%#
Bind("Name")%>'/></td>
</tr>
<tr>
<td><b>Group Name</b></td>
<td><asp:textbox ID="txtGroupName" runat="server"
text='<%# Bind("GroupName")%>' /></td>
</tr>
<tr>
<td><b>Group ModifiedDate</b></td>
<td><asp:textbox ID="Textbox1" runat="server"
text='<%# Bind("ModifiedDate") %>' /></td>
</tr>
</table><br />
<asp:Button ID="btnUpdate" runat="server"
CommandName="Update" Text="Update" />
<asp:Button ID="btnCancel" runat="server"
CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>

记住,编辑模板中必须包括用于保存修改的按钮。这些常见按钮的命令名称设置为——实现保存的Update和实现取消的Cancel。按钮引发了更新命令,细节存储在相关数据源对象中。只要不改变命令名称,就可以为按钮标题选择使用任何文本。如果修改命令名称,则需要处理FormView控件的ItemCommand事件,然后调用UpdateItem方法响应该事件。

生成控件属性的Eval方法不包括在更新过程中。无论在何处需要实现双向数据绑定(意味着读和写),都要使用Bind方法而不是Eval方法,即使二者语法相同。对于文本框而言,要绑定Text属性;对于下拉列表而言,通常要绑定SelectedValue属性。

图10-9显示了在编辑模式下运行前面代码的输出。

 
图10-9

除了在EditItemTemplate中设置Update和Cancel按钮,还需要为识别键字段而设置FormView控件的DataKeyNames属性。为了删除记录,可添加一个命令名称为Delete的按钮,同时配置底层数据源控件。

5.使用FormView控件插入新记录


当添加新记录时,使用InsertItemTemplate属性能够定义输入布局。为了避免混乱,插入模板不应该与编辑模板有太大不同。同时,应该认识到编辑和插入是两个具有不同需求的截然不同的操作。例如,插入模板应该提供可接受的控件默认值,在其他位置应该显示不确定或者空值。


开始插入操作,还需要一个命令名称为New的按钮。单击该按钮将强制FormView控件将模式修改为Insert,同时呈现插入模板中定义的内容。插入模板还应该提供一对Update/Cancel按钮,这两个按钮与编辑模式中的按钮使用相同的命令名称。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
Sun以10亿美元并购开源数据库厂商MySQL
Oracle数据库开发之PL/SQL基础应用
Oracle数据库开发基础教程
ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
全面解析35岁技术人的价值与出路
全面解析35岁技术人的价值与..
勇闯IT培训黑色围城
勇闯IT培训黑色围城
二手仿冒设备与思科再营销谁更火
二手仿冒设备与思科再营销谁..
· 二手仿冒设备与思科再..
· 汶川大地震 IT技术人为..
· 网络故障排除宝典
· 访问控制列表(ACL)介绍
· 视频访谈:网管员如何踏..
· 首届中国IT工程师生态..
· 华为路由器配置
· 企业数据恢复指南
· 龙芯要做中国的“奔腾”
· 2008年上半年全国软考..
· 交换机故障解决指南
· Vista SP1对决XP SP3
· LAMP技术精解
· 微软出价446亿美元收购..
· AIX操作系统管理应用(..
· 华为员工自杀频频拷问..
ARP攻击防范与解决方案
ARP攻击防范与解决方案
iSCSI应用与发展
iSCSI应用与发展
SQL Server 2008/2005全解
SQL Server 2008/2005全解
· SQL Server 2008/2005..
· SOA 面向服务架构
· SQL Server 2008/2005..
· iSCSI应用与发展
· RAID——磁盘阵列基础
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Apache技术专题
· 国际文档格式标准开战
· 路由器设置与口令恢复
· 打造安全服务器
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
· ADSL应用面面俱到
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
iSCSI应用与发展
iSCSI应用与发展
· iSCSI应用与发展
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· iSCSI应用与发展
· 三层交换技术专题
· Apache技术专题
· 企业数据恢复指南
· RAID——磁盘阵列基础
· 路由器设置与口令恢复
· SOA 面向服务架构
· ADSL应用面面俱到
· ADSL应用面面俱到
· 反垃圾邮件技术应用
· 访问控制列表(ACL)介绍