ITPub博客

首页 > 应用开发 > IT综合 > Asp.net数据绑定表达式语法

Asp.net数据绑定表达式语法

原创 IT综合 作者:tingantang 时间:2007-09-06 22:54:27 0 删除 编辑
使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以对数据进行检索、更新、删除和插入操作。[@more@]

数据绑定语法

数据绑定表达式包含在 <%#%> 分隔符之内,并使用 EvalBind 函数。Eval 函数用于定义单向(只读)绑定。Bind 函数用于定义双向(可更新)绑定。除了通过在数据绑定表达式中调用 EvalBind 方法执行数据绑定外,还可以调用 <%#%> 分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。

调用控件或 Page [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.page(VS.80).aspx ] 类的 DataBind 方法时,会对数据绑定表达式进行解析。对于有些控件,如 GridView [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview(VS.80).aspx ] 、DetailsView [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.detailsview(VS.80).aspx ] 和 FormView [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.formview(VS.80).aspx ] 控件,会在控件的 PreRender 事件期间自动解析数据绑定表达式,不需要显式调用 DataBind 方法。

下面的代码示例演示如何将数据绑定表达式与 ItemTemplate [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.formview.itemtemplate(VS.80).aspx ] 中的 FormView 控件结合使用。

Visual Basic
"FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">
                                    
  
    
"right">Product ID: <%# Eval("ProductID") %>
"right">Product Name: <%# Eval("ProductName") %>
"right">Category ID: <%# Eval("CategoryID") %>
"right">Quantity Per Unit:<%# Eval("QuantityPerUnit") %>
"right">Unit Price: <%# Eval("UnitPrice") %>
"FormView1"
  DataSourceID="SqlDataSource1"
  DataKeyNames="ProductID"     
  RunAt="server">
                                    
  
    
"right">Product ID: <%# Eval("ProductID") %>
"right">Product Name: <%# Eval("ProductName") %>
"right">Category ID: <%# Eval("CategoryID") %>
"right">Quantity Per Unit:<%# Eval("QuantityPerUnit") %>
"right">Unit Price: <%# Eval("UnitPrice") %>

使用 Eval 方法

Eval 方法可计算数据绑定控件(如 GridViewDetailsViewFormView 控件)的模板中的后期绑定数据表达式。在运行时,Eval 方法调用 DataBinder [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.databinder(VS.80).aspx ] 对象的 Eval [ http://msdn2.microsoft.com/zh-cn/library/4hx47hfe(VS.80).aspx ] 方法,同时引用命名容器的当前数据项。命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如 GridView 控件中的一行。因此,只能对数据绑定控件的模板内的绑定使用 Eval 方法。

Eval 方法以数据字段的名称作为参数,从数据源的当前记录返回一个包含该字段值的字符串。可以提供第二个参数来指定返回字符串的格式,该参数为可选参数。字符串格式参数使用为 String [ http://msdn2.microsoft.com/zh-cn/library/system.string(VS.80).aspx ] 类的 Format [ http://msdn2.microsoft.com/zh-cn/library/fht0f5be(VS.80).aspx ] 方法定义的语法。

使用 Bind 方法

Bind 方法与 Eval 方法有一些相似之处,但也存在很大的差异。虽然可以像使用 Eval 方法一样使用 Bind 方法来检索数据绑定字段的值,但当数据可以被修改时,还是要使用 Bind 方法。

在 ASP.NET 中,数据绑定控件(如 GridViewDetailsViewFormView 控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 SQL Select、Insert、Delete 和 Update 语句,则通过使用 GridViewDetailsViewFormView 控件模板中的 Bind 方法,就可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。出于这个原因,在数据绑定控件的 EditItemTemplateInsertItemTemplate 中要使用 Bind 函数。

Bind 方法通常与输入控件一起使用,例如由编辑模式中的 GridView 行所呈现的 TextBox [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.textbox(VS.80).aspx ] 控件。当数据绑定控件将这些输入控件作为自身呈现的一部分创建时,该方法便可提取输入值。

Bind 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:

Security note安全注意

该示例具有一个文本框,用于接受用户输入,这是一个潜在的安全威胁。默认情况下,ASP.NET 网页验证用户输入是否不包括脚本或 HTML 元素。有关更多信息,请参见脚本侵入概述 [ http://msdn2.microsoft.com/zh-cn/library/w1sw53ds(VS.80).aspx ] 。


  
Employee ID: <%# Eval("EmployeeID") %>
First Name:
Last Name:
 

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

显式调用 DataBind 方法

有些控件,如 GridViewFormViewDetailsView 控件,当它们通过 DataSourceID [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.design.webcontrols.basedataboundcontroldesigner.datasourceid(VS.80).aspx ] 属性绑定到数据源控件时,会通过隐式调用 DataBind 方法来执行绑定。但是,有些情况需要通过显式调用 DataBind 方法来执行绑定。

其中一种情况就是使用 DataSource [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.basedataboundcontrol.datasource(VS.80).aspx ] 属性(而非 DataSourceID 属性)将某个控件绑定到数据源控件时。在这种情况下,需要显式调用 DataBind 方法,从而执行数据绑定和解析数据绑定表达式。

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

使用对查找表的绑定

一种有关数据绑定控件的常见方案是允许用户使用 DropDownList [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.dropdownlist(VS.80).aspx ] 控件或其他列表控件从查找表中选择一个值,以更新或插入该值。在这种情况下,将该查找控件绑定到返回可能值列表的单独数据源,而将该查找控件的选定值绑定到父数据绑定行中的字段。

可以按照如下方法添加此功能。首先,对于查找控件,向数据绑定控件(例如 GridViewDetailsViewFormView 控件)中的模板添加一个列表控件(DropDownListListBox [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listbox(VS.80).aspx ] 控件)。接着将查找控件的 SelectedValue [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listcontrol.selectedvalue(VS.80).aspx ] 属性绑定到容器控件的数据源中的相关字段。其次,将查找控件的 DataSourceID 属性设置为可检索查找值的数据源控件。接着将查找控件的 DataTextField [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listcontrol.datatextfield(VS.80).aspx ] 属性设置为查找表中包含要显示的值的字段,并将其 DataValueField [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listcontrol.datavaluefield(VS.80).aspx ] 属性设置为查找表中包含查找值的唯一标识符的字段(如果适用)。

下面的代码示例演示一个 DropDownList 控件,此控件包括在 FormView 控件的 InsertItemTemplate [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.formview.insertitemtemplate(VS.80).aspx ] 模板中(它也可以是包括在 DetailsView 控件的 Fields [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.detailsview.fields(VS.80).aspx ] 属性或 GridView 控件的 Columns 属性中的 TemplateField [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.templatefield(VS.80).aspx ] 的 InsertItemTemplate [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.templatefield.insertitemtemplate(VS.80).aspx ] 模板)。DropDownList 控件的 SelectedValue 属性使用 Bind 方法实现与 FormView 控件当前行的 CategoryID 字段之间的双向绑定。将 DropDownList 控件的 DataSourceID [ http://msdn2.microsoft.com/zh-cn/library/system.web.ui.webcontrols.databoundcontrol.datasourceid(VS.80).aspx ] 属性设置为单独的数据源控件,用于检索可能的类别名称和 ID 列表。将 DropDownList 控件的 DataTextField 属性设置为查找数据源中的 CategoryName 字段,以便显示可能的类别名称列表。将 DropDownList 控件的 DataValueField 属性设置为查找数据源中相关类别名称的 CategoryID 字段。当用户从列表中选择类别名称时,DropDownList 控件的 SelectedValue 属性将被设置为选定类别名称的类别 ID。

Visual Basic

  "right">Category:
  "InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  


  "right">Category:
  "InsertCategoryDropDownList" 
                        SelectedValue='<%# Bind("CategoryID") %>' 
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  

在编辑项模板中,也可以使用同一列表控件。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10771986/viewspace-968273/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    27
  • 访问量
    129980