ASP.NET2.0简化的控件与简化的数据绑定

asp.net|控件|数据

  模板化数据绑定控件提供在页中呈现数据的最大灵活性。您可以回想一下 ASP.NET 1.x 版中的几个模板化控件,如 DataList 和 Repeater 控件。ASP.NET 2.0 继续支持这些控件,但在此版本中,在模板中对控件进行数据绑定的方式已得到简化和改进。本部分讨论在数据绑定控件模板中进行数据绑定的各种方式。 <%# Container.DataItem(“Name”) %>
<%# Container.DataItem(“Department”) %>
<%# DataBinder.Eval(
Container.DataItem, “HireDate”, “{0:mm dd yyyy}”) %>
现在不需要上面那么麻烦了,下面的是最简单的绑定语法:

<%# Eval(“Name”) %>
<%# Bind(“Name”) %>
<%# Eval(“HireDate”, “{0:mm dd yyyy}” ) %>
当然,以前的绑定语法在.net2.0中还是可以用的。
对于XML数据绑定的语法又与上面的有点不一样了
当使用XMLDataSource控件的时候,绑定的语法如下:

<% XPathBinder.Eval(Container.DataItem, “employees/employee/Name”) %>
简便的方法如下:

<% XPath(“employees/employee/Name”) %>
格式化的和平常的绑定也是一样的:

<% XPath(“employees/employee/HireDate”, “{0:mm dd yyyy}”) %>
以上都是返回单独的结点的语法,当想要得到多个结点时,语法又不同了:

<% XPathBinder.Select(Container.DataItem,”employees/employee”) %>
<% XpathSelect(“employees/employee”) %>
数据绑定表达式
    ASP.NET 2.0 改进了模板中的数据绑定,将数据绑定语法由完整的 v1.x 语法 DataBinder.Eval(Container.DataItem, fieldname) 简化为 Eval(fieldname)。与 DataBinder.Eval 一样,Eval 方法也接受一个可选的 formatString 参数。缩写的 Eval 语法与 DataBinder.Eval 的不同之处,在于 Eval 根据最近的容器对象(在上面的示例中为 DataListItem)的 DataItem 属性自动解析字段,而 DataBinder.Eval 接受该容器的一个参数。因此,Eval 仅在数据绑定控件的模板中使用,而不能在“页”级别使用。当然,ASP.NET 2.0 页继续支持 DataBinder.Eval,因此它可用于简化的 Eval 语法不受支持的场合。
<asp:DataList DataSourceID="ObjectDataSource1" runat="server">  <ItemTemplate>    <asp:Image ImageUrl='<%# Eval("FileName", "images/thumbs/{0}") %>' runat="server"/>    <asp:Label Text='<%# Eval("Caption") %>' runat="server"/>  </ItemTemplate></asp:DataList>
下面的示例演示新的简化 Eval 数据绑定语法在 DataList ItemTemplate 中绑定 Image、Label 和 HyperLink 控件。

 C# DataBinding in a DataList Template

 

数据绑定还可以包含为控件主题定义的一部分,这样,只需更改所应用的主题即可显著改变模板化控件的布局和外观。但在 Theme 模板中只能使用 Eval(或后面将讨论的 Bind)。不能随意绑定到用户代码。下一示例演示应用于上一示例为照片页创建完全不同外观的主题。有关主题的更多信息,请参考本教程的“应用样式、主题和外观”部分。

 C# DataBinding in a DataList Template (Themed)

 

FormView 控件
DataList 控件循环访问数据源的每个数据项,为每一项输出一次 ItemTemplate。这对于呈现项列表十分有用,但通常需要根据窗体中的单个数据项进行数据绑定。因此,ASP.NET 2.0 引入了 FormView 控件,该控件在任意形式的模板中一次呈现单个数据项。DetailsView 和 FormView 之间的主要差异在于 DetailsView 具有内置的表格呈现方式,而 FormView 需要用户定义的模板用于呈现。FormView 和 DetailsView 对象模型在其他方面非常类似。下面的示例演示一个绑定到 ObjectDataSource 的 FormView 控件。与前面的 DataList 示例一样,FormView 的 ItemTemplate 属性包含数据绑定 Image、Label 和 HyperLink。

 C# DataBinding in a FormView Template
 

和 DetailsView 相似,FormView 跟踪当前呈现的项,并可选择在数据源返回列表时支持对多个数据项进行分页。下面的示例演示一个启用了分页功能的 FormView。

 C# DataBinding in a FormView Template (Paged)

 

双向数据绑定
与 DetailsView 控件一样,FormView 通过其关联的数据源控件支持自动 Update、Insert 和 Delete 操作。若要定义编辑或插入操作的输入 UI,可在定义 ItemTemplate 的同时定义 EditItemTemplate 或 InsertItemTemplate。在本模板中,您将对输入控件(如 TextBox、CheckBox 或 DropDownList)进行数据绑定,以绑定到数据源的字段。但是,这些模板中的数据绑定使用“双向”数据绑定语法,从而允许 FormView 从模板中提取输入控件的值,以便传递到数据源。这些数据绑定使用新的 Bind(fieldname) 语法而不是 Eval。

重要事项: 使用 Bind 语法进行数据绑定的控件必须设置有 ID 属性。

<asp:FormView DataSourceID="ObjectDataSource1" DataKeyNames="PhotoID" runat="server">  <EditItemTemplate>    <asp:TextBox ID="CaptionTextBox" Text='<%# Bind("Caption") %>' runat="server"/>    <asp:Button Text="Update" CommandName="Update" runat="server"/>    <asp:Button Text="Cancel" CommandName="Cancel" runat="server"/>  </EditItemTemplate>  <ItemTemplate>    <asp:Label Text='<%# Eval("Caption") %>' runat="server" />    <asp:Button Text="Edit" CommandName="Edit" runat="server"/>  </ItemTemplate></asp:FormView>
在对 GridView 或 DetailsView 执行更新或插入操作时,如果该控件的列或字段定义了 BoundField,GridView 或 DetailsView 负责创建 Edit 或 Insert 模式中的输入 UI,以便它能自动提取这些输入值以传递回数据源。由于模板包含任意的用户定义的 UI 控件,因此,需要使用双向数据绑定语法,这样 FormView 等模板化控件才能知道应从模板中提取哪些控件值以用于更新、插入或删除操作。在 EditItemTemplate 中仍然可以使用 Eval 语法进行不传递回数据源的数据绑定。另请注意,FormView 与 DetailsView 和 GridView 一样,支持使用 DataKeyNames 属性保留主键字段(即使这些字段并未呈现)的原始值以传递回更新/插入操作。

FormView 支持使用 DefaultMode 属性指定要显示的默认模板,但在默认情况下,FormView 以 ReadOnly 模式启动并呈现 ItemTemplate。若要启用用于从 ReadOnly 模式转换为 Edit 或 Insert 模式的 UI,可以向模板添加一个 Button 控件,并将其 CommandName 属性设置为 Edit 或 New。可以在 EditItemTemplate 内添加 CommandName 设置为 Update 或 Cancel 的按钮,以用于提交或中止更新操作。类似地,也可以添加 CommandName 设置为 Insert 或 Cancel 的按钮,以用于提交或中止插入操作。

下面的示例演示一个定义了 ItemTemplate 和 EditItemTemplate 的 FormView。ItemTemplate 包含使用 Eval(单向)绑定的控件,而 EditItemTemplate 包含一个使用 Bind 语句双向绑定的 TextBox 控件。主键字段 (PhotoID) 是使用 DataKeyNames 属性在视图状态中进行往返的。FormView 包含用于在其模板之间进行切换的命令按钮。

 C# Two-Way Databinding in a FormView Edit Template

 

通过使用添加到 Columns 或 Fields 集合的 TemplateField,GridView 和 DetailsView 还支持模板化 UI。TemplateField 支持使用 ItemTemplate、EditItemTemplate 和 InsertItemTemplate(仅 DetailsView)指定这些控件的不同呈现模式中的字段 UI。与上面的 FormView 示例一样,EditItemTemplate 或 InsertItemTemplate 中的双向绑定允许 GridView 或 DetailsView 从这些模板中的控件提取值。TemplateField 的常见用途是向 EditItemTemplate 添加验证程序控件,用于 GridView 或 DetailsView 操作的声明性验证。下面的示例演示这种方法的一个示例。有关 ASP.NET 中可用的验证控件的更多信息,请参考本教程的“验证窗体输入控件”部分。

 C# Validation in a GridView Edit Template

 

TemplateField 的另一个用途是自定义输入控件,这种控件用于输入 GridView 或 DetailsView 列/字段值。例如,可以将 DropDownList 控件放在 TemplateField 的 EditItemTemplate 中,以允许从预定义的值列表进行选择。下面的示例演示这种方法。注意,本例中的 DropDownList 与它自己的数据源控件进行了数据绑定,以便动态地获取该列表的值。

 C# DropDownList in a GridView Edit Template

时间: 2024-11-01 14:40:10

ASP.NET2.0简化的控件与简化的数据绑定的相关文章

ASP.NET2.0中用Gridview控件操作数据

asp.net|控件|数据 在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高.其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大.在本文中,将探讨Gridview控件中的一些功能特性和用法,如果各位读者对Gridview控件不大了解,可以通过<使用ASP.NET 2.0中的Gridview控件>一文,来对Gridview控件有个初步的认识. 1.使用Gridview插入新记录 在Gridview控件中,

ASP.NET2.0的缓存控件和地址映射

asp.net|缓存|控件 今年,微软终于发布了.net framework 2.0 beta 以及一系列的开发工具的beta 测试版,其中包括visual web developer 2005系列(可以在http://www.asp.net上下载).在asp.net 2.0中,引入了很多新的控件和功能,比起之前的asp.net 1.0 和asp.net 1.1,有了革命性的改变.本文将简单介绍其中的两个新的功能:缓存功能和地址映射功能.本文以.net framework 2.0 和visual

ASP.NET2.0中用Gridview控件操作数据的代码_实用技巧

其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大.在本文中,将探讨Gridview控件中的一些功能特性和用法,如果各位读者对Gridview控件不大了解,可以通过<使用ASP.NET 2.0中的Gridview控件>一文,来对Gridview控件有个初步的认识. 1.使用Gridview插入新记录 在Gridview控件中,可以实现插入新记录的操作(见<使用ASP.NET 2.0中的Gridview控件>)一文,但如果想实现在Gridview中,实现在G

第一次用.net2.0 LOGIN登陆控件的困惑和解决方法

解决|控件 1.我们没有真正的服务器,我们只是租用了.net2.0 + SQLserver空间,SQL数据库名是固定的.2.空间提供商不可能给我们设定数据源或给你aspnetdb数据库权限.3.我们没有服务器的 \Windows\Microsoft.Net\Framework\v2.x\Config 权限.    已知上面三点,如果直接把本地测试好的项目传到服务器肯定会出错(因为他默认是调用\Windows\Microsoft.Net\Framework\v2.x\Config ),我认为好的解

ASP.NET 2.0之ObjectDataSourc控件

asp.net|object|控件 学习asp.net2.0有一段时间了,我不是从1.1开始的,所以,也说不出2.0相对于1.1来讲有多大的变化或是在操作上有多大的便利,我这里只把我学习2.0的一些小经验与大家分享. 2.0中有一个ObjectDataSource数据源控件,通过它,可以把中间层或其它层的数据绑定到dropdownlist/datalist/repeater/gridview等数据控件中,为什么这里只ObjectDataSource而不提SqlDataSource或其它的数据源控

ASP.NET 2.0中GridView控件的隐藏列的问题

Asp.net 2.0 GridView隐藏列visible="false" 后你就无法取得这列的值了, 而用datagrid就没有这个问题, MS这个混蛋老是改变游戏规则, 幸好我聪明, 在百度上搜到了别人的解决方法, 然后加入了自己的方法, 才解决问题: protected void GVList_RowDataBound(object sender, GridViewRowEventArgs e) { //隐藏不必要的列 if ((e.Row.RowType == DataCon

ASP.NET 2.0中Gridview控件高级技巧

ASP.NET 2.0中新增加的gridview控件的确十分强大,弥补了在asp.net 1.1中,使用datagrid控件时的不足之处.因为在asp.net 1.1中,在使用 datagrid时,很多情况下依然要编写大量的代码,十分不方便,而且有时需要很 多技巧.而在asp.net 2.0中,很多情况下,使用gridview控件的话,甚至只需 要拖拉控件,设置属性就可以了,不需要编写任何代码.在<使用ASP.NET 2.0 中的GridView控件>和<ASP.NET2.0中用Grid

Asp.Net2.0权限树中Checkbox的操作

asp.net 这里使用asp.net2.0的TreeView控件结合JavaScript实现权限树的部分功能. 假设权限树中有如下三条规则: 1.该节点可以访问,则他的父节点也必能访问: 2.该节点可以访问,则他的子节点也都能访问: 3.该节点不可访问,则他的子节点也不能访问. 代码如下://获取元素指定tagName的父元素function public_GetParentByTagName(element, tagName) {    var parent = element.parent

ASP.Net2.0 WebPart趣味网页设计

asp.net|web|设计|网页|网页设计 今天看了看ASP,Net2.0 的WebPart控件的使用方法,实际上昨天就看了一点只是没明白怎么回事,我今天把WebCasts上的讲座看了一遍,才明白点.WebPart就是实现通过客户端用户对控件的拖拽把网页设置成自己想要的样子,就向博客那样可以自己做自己的主页.用webpart控件实现这个功能是非常容易的,但是前提条件是有数据库支持,因为控件位置改变后需要记录在数据库中,虽然Microsoft说可以通过aspnet_ressql.exe对sql