关闭

Eval和DataBind方法绑定页面数据

864人阅读 评论(0) 收藏 举报

使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以对数据进行检索、更新、删除和插入操作。

 

数据绑定语法

 

数据绑定表达式包含在 <%#%> 分隔符之内,并使用 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 方法采用数据字段的名称作为参数,从而与绑定属性关联,如下面的示例所示:

该示例具有一个文本框,用于接受用户输入,这是一个潜在的安全威胁。默认情况下,ASP.NET 网页验证用户输入是否不包括脚本或 HTML 元素。有关更多信息,请参见脚本侵入概述。

 

<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。

 

<tr>
  <td align="right"><b>Category:</b></td>
  <td><asp:DropDownList ID="InsertCategoryDropDownList"
                        SelectedValue='<%# Bind("CategoryID") %>'
                        DataSourceID="CategoriesDataSource"
                        DataTextField="CategoryName"
                        DataValueField="CategoryID"
                        RunAt="Server" />
  </td>
</tr>

 

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

 

 

ASP.NET Eval四种绑定方式:

1、1.x中的数据绑定语法

<asp:Literal id="litEval2" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "userName")%>' />

 

2、 2.x简化Eval数据绑定语法

<asp:Literal id="litEval1" runat="server" Text='<%Eval("userName")%>' />

 

3、第二种方法的方法重载

<a href='<%# Eval("userId","Default.aspx?id={0}")%>'><%# Eval("userName") %></a>

 

4、eval同时绑定两个值

<a href='<%# string.Format("Default.aspx?id={0}&role={1}", Eval("userId"),Eval("userRole"))%>'><%# Eval("userName") %></a>

 

 

Eval方法在运行时使用反射执行后期绑定计算,因此与标准 ASP.NET 数据绑定语法相比,它会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法


Eval 方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回。Bind 方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。

0
0
查看评论

Eval和DataBind方法绑定页面数据

Eval是数据的单向绑定,而DataBind()是双向绑定。在DataGridView和Reapter直接绑定了数据源后,DataBind可以隐士的调用
  • liuyuehui110
  • liuyuehui110
  • 2011-01-11 19:26
  • 3192

ASP.NET:数据库绑定控件DataBind方法

  DataBind方法是ASP.NET中一个很重要的概念,几乎所有的控件都需要它控制数据的操作,它的作用是在为控件指定数据源后,执行数据绑定操作。在上一章的DataSet对象实例中我们已经使用过,利用这个方法为DataGrid控件绑定数据,即DataGrid.DataBind()。...
  • mydriverc
  • mydriverc
  • 2007-06-08 16:01
  • 2195

数据绑定Eval与Bind区别

使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以对数据进行检索、更新、删除和插入操作。 数据绑定语法          数据绑定表达式包含在  分隔符之内,并使用 Ev...
  • nuptsv_ice
  • nuptsv_ice
  • 2014-04-21 16:55
  • 930

GridView等组件绑定后台数据源列的绑定方法,onclick方法调用中含有Eval绑定如何调用js方法

在GridView的操作方法列中,存在利用onclick方法调用javascript方法并传入后台列数据做参数,其中的调用方法可以分成3种: 1:html控件,使用html代码为主,按html代码直接书写,服务器代码只绑定数据,需要加单引号; 2:html控件,使用服务器代码为主,在服务器代码进行绑...
  • yzy85
  • yzy85
  • 2017-04-08 23:08
  • 377

JavaScript数据绑定databind框架knockout

Knockout是一个轻量级的UI类库,使用的是MVVM(model-view-)模式,能够让JavaScript前端简单化,用于页面的数据绑定。使用它可以减少web前端js的代码量,而且knockout轻量级,并不会增加整个页面的臃肿程度。 一、下载使用 直接到官网下载knockjs,下载后保...
  • Jeffery_Gong
  • Jeffery_Gong
  • 2016-03-28 10:30
  • 2078

DataBind()与Eval()

 asp.net 2.0 framework 支持两种模板也支持两种数据绑定表达式,单向和双向数据绑定表达式. 在单向数据绑定表达式,使用Eval()方法来显示数据项的值.使用 双向数据表达式,不仅可以显示数据,还可以对数据项进行编辑.在双向表达式中使用Bind()方法.
  • lizhao1226
  • lizhao1226
  • 2010-01-15 13:37
  • 528

关于webform中控件的列表数据的绑定

1、使用这些控件的方法主要是以下步骤;
  • xcl13014673050
  • xcl13014673050
  • 2015-07-06 14:53
  • 275

Eval 结合后台的截取字符串函数

CutString为后台定义的截取字符串长度的函数 protected string CutString(string txt) { ... }
  • limlimlim
  • limlimlim
  • 2013-09-03 11:11
  • 1101

【Ajax】[bug] 页面 eval() 处理 Json 数据报错

记录两个开发的时候碰到的问题 1. 在页面使用 Jquery 的 Ajax eval() 方法处理返回数据时,网页控制台一直在报错  Uncaught SyntaxError: Unexpected token 因为 eval() 方法是把 ajax 异步返回的 json 数据...
  • u011704894
  • u011704894
  • 2015-04-01 17:35
  • 1541

如何把数据库中的内容绑定到CheckBoxList上?

有时候我们不但要把CheckBoxList的数据写入到数据库,还要把数据库的内容与CheckBoxList对应,让他显示上次我们选中的项,我是这么实现的:比方说我们要给用户赋予不同的权限,那么我们数据库有Login,ProdClass两张表,那么我们在ProdClass表中插入一个字段UserID,...
  • xft_1981
  • xft_1981
  • 2006-12-01 09:30
  • 7422
    个人资料
    • 访问:787715次
    • 积分:11277
    • 等级:
    • 排名:第1675名
    • 原创:297篇
    • 转载:152篇
    • 译文:4篇
    • 评论:648条
    博客专栏
    最新评论