bind与eval

来源:互联网 发布:淘宝风格馆店铺形象图 编辑:程序博客网 时间:2024/05/22 06:11
 

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

  

  

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

  

  使用 Eval方法

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

  

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

  

  使用 Bind方法

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

  

   ASP.NET中,数据绑定控件(如 GridViewDetailsView FormView控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 SQL SelectInsertDelete Update语句,则通过使用 GridViewDetailsView 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=&apos;<%# Bind("FirstName") %>&apos; />

   </td>

   </tr>

   <tr>

   <td align=right>

   <b>Last Name:</b>

   </td>

   <td>

   <asp:TextBox ID="EditLastNameTextBox" RunAt="Server"

   Text=&apos;<%# Bind("LastName") %>&apos; />

   </td>

   </tr>

   <tr>

   <td colspan="2">

   <asp:LinkButton ID="UpdateButton" RunAt="server"

   Text="Update" CommandName="Update" />

  

   <asp:LinkButton ID="CancelUpdateButton" RunAt="server"

   Text="Cancel" CommandName="Cancel" />

   </td>

   </tr>

   </table>

  </EditItemTemplate>

  

  

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

  

  

  使用 DataBinder.Eval

  ASP.NET提供了一个名为 DataBinder.Eval的静态方法,该方法计算后期绑定的数据绑定表达式,并将结果格式化为字符串(可选)。利用此方法,可以避免许多在将值强制为所需数据类型时必须执行的显式强制转换操作。

  

  例如,在下面的代码片段中,一个整数显示为货币字符串。使用标准的 ASP.NET数据绑定语法,必须首先强制转换数据行的类型以便检索数据字段 IntegerValue。然后,这将作为参数传递到 String.Format方法:

  

  

  <%# String.Format("{0:c}", ((DataRowView)Container.DataItem)["IntegerValue"]) %>

  

  

  将此语法与 DataBinder.Eval的语法进行比较,后者只有三个参数:数据项的命名容器、数据字段名称和格式字符串。在模板化列表中(如 DataList类、DataGrid类或 Repeater类),命名容器始终是 Container.DataItem

  

  

  <%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>

  

  

  格式字符串参数是可选的。如果它被忽略,DataBinder.Eval将返回类型对象的值,如下面的示例所示:

  

  

  <%# (bool)DataBinder.Eval(Container.DataItem, "BoolValue") %>

  

  

  当对模板化列表中的控件进行数据绑定时,DataBinder.Eval特别有用,因为数据行和数据字段通常都必须强制转换。

    

原创粉丝点击