ASP.NET框架中的数据绑定概要与数据绑定表达式的使用

所属分类: 网络编程 / ASP.NET 阅读数: 1147
收藏 0 赞 0 分享

<%# %> 语法

ASP.NET 介绍了一种新的声明性语法 <%# %>。该语法是在 .aspx 页中使用数据绑定的基础。所有数据绑定表达式都必须包含在这些字符中。下面的列表包含从多个源进行简单数据绑定的示例:
简单属性(用于客户的语法):

<%# custID %>

集合(用于订单的语法):

<asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">

 表达式(用于联系人的语法):

<%# ( customer.First Name + " " + customer.LastName ) %>

     
方法结果(用于未结清余额的语法):

<%# GetBalance(custID) %>

     
在前面的示例中,<%# %> 内联标记用于指示将把特定数据源中的信息放在 .aspx 页中的什么位置。以下数据绑定示例使用 TextBox Web 服务器控件:

<asp:textbox id=txt text="<%# custID %>" runat=server />


Page.DataBind() versus Control.DataBind()

确定特定数据源并设置 .aspx 页上的对象之后,您必须将数据绑定到数据源。您可以使用 Page.DataBind 或 Control.DataBind 方法将数据绑定到数据源。

这两种方法的使用方式很相似。主要差别在于:调用 Page.DataBind 方法后,所有数据源都将绑定到它们的服务器控件。在显式调用 Web 服务器控件的 DataBind 方法或在调用页面级的 Page.DataBind 方法之前,不会有任何数据呈现给控件。通常,可以从 Page_Load 事件调用 Page.DataBind(或 DataBind)。

数据绑定表达式深入
数据绑定表达式包含在 <%# 和 %> 分隔符之内,并使用 Eval 和 Bind 函数。Eval 函数用于定义单向(只读)绑定。Bind 函数用于定义双向(可更新)绑定。除了通过在数据绑定表达式中调用 Eval 和 Bind 方法执行数据绑定外,还可以调用 <%# 和 %> 分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。
调用控件或 Page 类的 DataBind 方法时,会对数据绑定表达式进行解析。对于有些控件,如 GridView、DetailsView 和 FormView 控件,会在控件的 PreRender 事件期间自动解析数据绑定表达式,不需要显式调用 DataBind 方法。
下面的代码示例演示如何将数据绑定表达式与 ItemTemplate 中的 FormView 控件结合使用。

<asp:FormView ID="FormView1"
 DataSourceID="SqlDataSource1"
 DataKeyNames="ProductID"   
 RunAt="server">

 <ItemTemplate>
  <table>
   <tr><td align="right"><b>Product ID:</b></td>    <td><%# Eval("ProductID") %></td></tr>
   <tr><td align="right"><b>Product Name:</b></td>   <td><%# Eval("ProductName") %></td></tr>
   <tr><td align="right"><b>Category ID:</b></td>   <td><%# Eval("CategoryID") %></td></tr>
   <tr><td align="right"><b>Quantity Per Unit:</b></td><td><%# Eval("QuantityPerUnit") %></td></tr>
   <tr><td align="right"><b>Unit Price:</b></td>    <td><%# Eval("UnitPrice") %></td></tr>
  </table>         
 </ItemTemplate>         
</asp:FormView>

使用 Eval 方法
Eval 方法可计算数据绑定控件(如 GridView、DetailsView 和 FormView 控件)的模板中的后期绑定数据表达式。在运行时,Eval 方法调用 DataBinder 对象的 Eval 方法,同时引用命名容器的当前数据项。命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如 GridView 控件中的一行。因此,只能对数据绑定控件的模板内的绑定使用 Eval 方法。
Eval 方法以数据字段的名称作为参数,从数据源的当前记录返回一个包含该字段值的字符串。可以提供第二个参数来指定返回字符串的格式,该参数为可选参数。字符串格式参数使用为 String 类的 Format 方法定义的语法。

使用 Bind 方法
Bind 方法与 Eval 方法有一些相似之处,但也存在很大的差异。虽然可以像使用 Eval 方法一样使用 Bind 方法来检索数据绑定字段的值,但当数据可以被修改时,还是要使用 Bind 方法。
在 ASP.NET 中,数据绑定控件(如 GridView、DetailsView 和 FormView 控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 SQL Select、Insert、Delete 和 Update 语句,则通过使用 GridView、DetailsView 或 FormView 控件模板中的 Bind 方法,就可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。出于这个原因,在数据绑定控件的 EditItemTemplate 或 InsertItemTemplate 中要使用 Bind 函数。
Bind 方法通常与输入控件一起使用,例如由编辑模式中的 GridView 行所呈现的 TextBox 控件。当数据绑定控件将这些输入控件作为自身呈现的一部分创建时,该方法便可提取输入值。
Bind 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:

<EditItemTemplate>
 <table>
  <tr>
   <td align=right>
    <b>Employee ID:</b>
   </td>
   <td>
    <%# Eval("EmployeeID") %>
   </td>
  </tr>
  <tr>
   <td align=right>
    <b>First Name:</b>
   </td>
   <td>
    <asp:TextBox ID="EditFirstNameTextBox" RunAt="Server"
     Text='<%# Bind("FirstName") %>' />
   </td>
  </tr>
  <tr>
   <td align=right>
    <b>Last Name:</b>
   </td>
   <td>
    <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"
      Text='<%# Bind("LastName") %>' />
   </td>
  </tr>
  <tr>
   <td colspan="2">
    <asp:LinkButton ID="UpdateButton" RunAt="server"
     Text="Update" CommandName="Update" />
    &nbsp;
    <asp:LinkButton ID="CancelUpdateButton" RunAt="server"
     Text="Cancel" CommandName="Cancel" />
   </td>
  </tr>
 </table>
</EditItemTemplate>

单击行的 Update 按钮时,使用 Bind 语法绑定的每个控件属性值都会被提取出来,并传递给数据源控件以执行更新操作。

显式调用 DataBind 方法
有些控件,如 GridView、FormView 和 DetailsView 控件,当它们通过 DataSourceID 属性绑定到数据源控件时,会通过隐式调用 DataBind 方法来执行绑定。但是,有些情况需要通过显式调用 DataBind 方法来执行绑定。
其中一种情况就是使用 DataSource 属性(而非 DataSourceID 属性)将某个控件绑定到数据源控件时。在这种情况下,需要显式调用 DataBind 方法,从而执行数据绑定和解析数据绑定表达式。
另一种情况就是需要手动刷新数据绑定控件中的数据时。假设有这样一个页面,其中有两个控件,这两个控件都显示来自同一数据库的信息(可能使用不同的视图)。在这种情况下,可能需要显式地将控件重新绑定到数据,以保持数据显示的同步。例如,可能有一个显示产品列表的 GridView 控件,和一个允许用户编辑单个产品的 DetailsView 控件。虽然 GridView 和 DetailsView 控件所显示的数据都来自同一数据源,但被绑定到不同的数据源控件,因为这两个控件使用不同的查询来获取其数据。用户可能会使用 DetailsView 控件更新记录,从而引发由关联的数据源控件执行更新。但是,由于 GridView 控件被绑定到不同的数据源控件,所以,该控件仍将显示旧的记录值,直至页面被刷新时才会更新。因此,在 DetailsView 控件更新数据后,可以调用 DataBind 方法。这会使 GridView 控件更新其视图,并重新执行任何数据绑定表达式以及 <%# 和 %> 分隔符之内的公共范围代码。这样一来,GridView 控件将会反映 DetailsView 控件所做的更新。

使用对查找表的绑定
一种有关数据绑定控件的常见方案是允许用户使用 DropDownList 控件或其他列表控件从查找表中选择一个值,以更新或插入该值。在这种情况下,将该查找控件绑定到返回可能值列表的单独数据源,而将该查找控件的选定值绑定到父数据绑定行中的字段。
可以按照如下方法添加此功能。首先,对于查找控件,向数据绑定控件(例如 GridView、DetailsView 或 FormView 控件)中的模板添加一个列表控件(DropDownList 或 ListBox 控件)。接着将查找控件的 SelectedValue 属性绑定到容器控件的数据源中的相关字段。其次,将查找控件的 DataSourceID 属性设置为可检索查找值的数据源控件。接着将查找控件的 DataTextField 属性设置为查找表中包含要显示的值的字段,并将其 DataValueField 属性设置为查找表中包含查找值的唯一标识符的字段(如果适用)。
下面的代码示例演示一个 DropDownList 控件,此控件包括在 FormView 控件的 InsertItemTemplate 模板中(它也可以是包括在 DetailsView 控件的 Fields 属性或 GridView 控件的 Columns 属性中的 TemplateField 的 InsertItemTemplate 模板)。DropDownList 控件的 SelectedValue 属性使用 Bind 方法实现与 FormView 控件当前行的 CategoryID 字段之间的双向绑定。将 DropDownList 控件的 DataSourceID 属性设置为单独的数据源控件,用于检索可能的类别名称和 ID 列表。将 DropDownList 控件的 DataTextField 属性设置为查找数据源中的 CategoryName 字段,以便显示可能的类别名称列表。将 DropDownList 控件的 DataValueField 属性设置为查找数据源中相关类别名称的 CategoryID 字段。当用户从列表中选择类别名称时,DropDownList 控件的 SelectedValue 属性将被设置为选定类别名称的类别 ID。

更多精彩内容其他人还在看

ASP.NET 水晶报表打印功能实现代码

ASP.NET下的水晶报表打印,据我所知有以下几种办法可以打印
收藏 0 赞 0 分享

ASP.Net 图片存入数据库的实现代码

在很多时候,我们有这样的需求:把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
收藏 0 赞 0 分享

让Silverlight 2.0动画动起来Making Silverlight 2.0 animation Start(不能运动原因)

Microsoft Expression Blend 2 制作动画个人感觉倒像3DMAX 可以自动捕捉关键帧
收藏 0 赞 0 分享

asp.net Reporting Service在Web Application中的应用

由于我们这个项目中使用微软的报表服务(Reporting Services)作为报表输出工具,本人也对它进行一点点研究,虽没有入木三分,但这点知识至少可以在大部分Reporting Service的场景中应用。
收藏 0 赞 0 分享

C# 文件上传 默认最大为4M的解决方法

.net中默只能上传小于4m的文件,大于4M将无法显示页面.那么如何设置来使imputfile能上传更大的文件呢
收藏 0 赞 0 分享

asp.net 购物车实现详细代码

asp.net 购物车实现详细代码
收藏 0 赞 0 分享

asp.net repeater实现批量删除时注册多选框id到客户端

repeater批量删除时注册多选框id到客户端的实现代码
收藏 0 赞 0 分享

asp.net aspnetpager分页统计时与实际不符的解决办法

最近分页方面根据实际需要修改了一些函数
收藏 0 赞 0 分享

iis 服务器应用程序不可用的解决方法

访问页面时提示 服务器应用程序不可用,大家可以按照下面的方法重新注册下,应该能好点
收藏 0 赞 0 分享

asp.net button 绑定多个参数

asp.net button 绑定多个参数的代码
收藏 0 赞 0 分享
查看更多