数据绑定表达式语法(Eval,Bind区别)

摘要:
数据绑定语法数据绑定表达式包含在分隔符之内,并使用Eval和Bind函数。除了通过在数据绑定表达式中调用Eval和Bind方法执行数据绑定外,还可以调用分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。对于有些控件,如GridView、DetailsView和FormView控件,会在控件的PreRender事件期间自动解析数据绑定表达式,不需要显式调用DataBind方法。出于这个原因,在数据绑定控件的EditItemTemplate或InsertItemTemplate中要使用Bind函数。
数据绑定表达式语法

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

数据绑定语法

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

调用控件或 Page 类的 DataBind 方法时,会对数据绑定表达式进行解析。对于有些控件,如 GridViewDetailsViewFormView 控件,会在控件的 PreRender 事件期间自动解析数据绑定表达式,不需要显式调用 DataBind 方法。

下面的代码示例演示如何将数据绑定表达式与 ItemTemplate 中的 FormView 控件结合使用。

Visual Basic
<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>
<asp:FormView  
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 方法可计算数据绑定控件(如 GridViewDetailsViewFormView 控件)的模板中的后期绑定数据表达式。在运行时,Eval 方法调用 DataBinder 对象的 Eval 方法,同时引用命名容器的当前数据项。命名容器通常是包含完整记录的数据绑定控件的最小组成部分,如 GridView 控件中的一行。因此,只能对数据绑定控件的模板内的绑定使用 Eval 方法。

Eval 方法以数据字段的名称作为参数,从数据源的当前记录返回一个包含该字段值的字符串。可以提供第二个参数来指定返回字符串的格式,该参数为可选参数。字符串格式参数使用为 String 类的 Format 方法定义的语法。

使用 Bind 方法

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

在 ASP.NET 中,数据绑定控件(如 GridViewDetailsViewFormView 控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 SQL Select、Insert、Delete 和 Update 语句,则通过使用 GridViewDetailsViewFormView 控件模板中的 Bind 方法,就可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。出于这个原因,在数据绑定控件的 EditItemTemplateInsertItemTemplate 中要使用 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   RunAt="Server"
Text='<%# Bind("FirstName") %>' />
</td>
</tr>
<tr>
<td align=right>
<b>Last Name:</b>
</td>
<td>
<asp:TextBox   RunAt="Server"
Text='<%# Bind("LastName") %>'  />
</td>
</tr>
<tr>
<td colspan="2">
<asp:LinkButton   RunAt="server"
Text="Update" CommandName="Update" />
&nbsp;
<asp:LinkButton   RunAt="server"
Text="Cancel" CommandName="Cancel" />
</td>
</tr>
</table>
</EditItemTemplate>

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

显式调用 DataBind 方法

有些控件,如 GridViewFormViewDetailsView 控件,当它们通过 DataSourceID 属性绑定到数据源控件时,会通过隐式调用 DataBind 方法来执行绑定。但是,有些情况需要通过显式调用 DataBind 方法来执行绑定。

其中一种情况就是使用 DataSource 属性(而非 DataSourceID 属性)将某个控件绑定到数据源控件时。在这种情况下,需要显式调用 DataBind 方法,从而执行数据绑定和解析数据绑定表达式。

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

免责声明:文章转载自《数据绑定表达式语法(Eval,Bind区别)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇if if 与 if elif 本质区别SQL列数据转换为字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在

Jdk12 都发布了, 我也下载一个玩一玩吧。刚准备要下载,发现之前已经下载了一个11, 那就11 吧,也不用太新了。安装了jdk11,习惯性的设置了一下环境变量: JAVA_HOME=D: ooljdk-11.0.2。JAVA_HOME=D:Program FilesJavajdk1.8.0_201设置完了,忘记改回去了。 项目中其实使用的是jdk8,结...

IDE Eval Resetter:JetBrains 全家桶无限试用插件

JetBrains 系列  IDE,开源项目可以重置 JetBrains 试用 30 天的时间,实现“无限试用”,本文分享下使用方法。 一、IDE Eval Resetter 介绍 项目地址:https://gitee.com/pengzhile/ide-eval-resetter 项目功能:JetBrains 所有产品都有 30 天试用,这个插件的作用就...

laravel学习:容器绑定与解析

1.在服务容器中注册类(bind) $this->app->bind('sender','MailSender');//$this->app成为服务容器。   2.从服务容器生成类(make) $sender = $this->app->make('sender');//从服务容器($this->app)创建一个send...

Dev属性设置

DisplayFormat 设置显示格式如:{0:P}表示显示为百分号模式。如数据源中为0.5。表示出来为50% 2、GridContro总合计及分组合计: 常规总合计直接RunDesigner-Group Summary Items DisplayFormat 设置显示格式如:{0:P}表示显示为百分号模式。如数据源中为0.5。表示出来为50% Fiel...

[置顶] Gridview中textbox列,按回车键或者上下键自动下移

1.aspx代码,因为textbox的外面又一层table所以用到了很多children[],希望有更好的办法,真实例子粘过去就能运行 <script src="http://t.zoukankan.com/jquery-1.4.2.min.js" type="text/javascript"></script> <scrip...

Angular 报错 Can't bind to 'formGroup' since it isn't a known property of 'form'

错误描述 当form表单加FormGroup属性时报错 Can't bind to 'formGroup' since it isn't a known property of 'form' <form nz-form [formGroup]="valForm" (ngSubmit)="submit()" role="form">...