Bind()方法与Eval()方法的区别与使用

  经常要用到GridView,DataList等控件。会涉及到对数据库字段的绑定,显示。会用到Bind("FieldName"),或者 Eval("FieldName“)方法。现作点介绍

  Eval()方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法Bind相比,会导致性能明显下降。

它一般用在绑定时需要格式化字符串的情况下,(如:Text='<%# string.Format("{0}",Eval("RoleID")) %>'),多数情况尽量少用此方法。

  Eval 方法是静态(只读)方法,即只可将数据库中字段绑定到数据控件上显示,不能编辑修改此值,该方法采用数据字段的值作为参数并将其作为字符串返回。Bind 方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库,即可以编辑修改数据控件的值再返回数据库进行更新。

  Eval 方法

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

   Bind 方法
  Bind 方法与 Eval 方法有一些相似之处,但也存在很大的差异。虽然可以像使用 Eval 方法一样使用 Bind 方法来检索数据绑定字段的值,但当数据可以被修改时,还是要使用 Bind 方法。
  在 ASP.NET 中,数据绑定控件(如 GridView、DetailsView 和 FormView 控件和DataList控件)可自动使用数据源控件的更新、删除和插入操作。例如,如果已为数据源控件定义了 SQL Select、Insert、Delete 和 Update 语句,则通过使用 GridView、DetailsView 或 FormView 控件模板中的 Bind 方法,就可以使控件从模板中的子控件中提取值,并将这些值传递给数据源控件。然后数据源控件将执行适当的数据库命令。出于这个原因,在数据绑定控件的 EditItemTemplate 或 InsertItemTemplate 中要使用 Bind 函数

  Bind 方法通常与输入控件一起使用,例如由编辑模式中的 GridView 行所呈现的 TextBox 控件。当数据绑定控件将这些输入控件作为自身呈现的一部分创建时,该方法便可提取输入值。

例如如下在GridView中的使用,它们的区别如下:

<asp:GridView ID="gdvUser" runat="server">

  <Columns>

    <asp:TemplateField HeaderText="用户角色">
      <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("RoleName") %>'></asp:TextBox>
                 </EditItemTemplate>
                 <ItemTemplate>
                      <asp:Label ID="lblRoleID" runat="server" Text='<%# string.Format("{0}",Eval("RoleID")) %>'

          Visible="False"></asp:Label>&nbsp;
                      <asp:Label ID="lblRoleName" runat="server"></asp:Label>
                 </ItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField HeaderText="状态">
                 <EditItemTemplate>
                       <asp:DropDownList ID="DropDownList1" runat="server">
                                <asp:ListItem Value="0">正常</asp:ListItem>
                                <asp:ListItem Value="1">锁定</asp:ListItem>
                        </asp:DropDownList>
                  </EditItemTemplate>
                  <ItemTemplate>
                            <asp:Label ID="lblStatus" runat="server" Text='<%# Bind("Status") %>' Visible="False"></asp:Label>
                            <asp:Label ID="lblState" runat="server"></asp:Label>
                  </ItemTemplate>
           </asp:TemplateField>

  </Columns>            
</asp:GridView>

 如上区别说明:在<EdiItem Template>项中,必须使用Bind()方法,因为需要编辑更改数据字段的值,并要返回到数据库中。

如果只是显示内容在<ItemTemplate>项中,使用Eval()方法,可以对显示的内容进行格式化。

另外:在模板化列表中(如 DataList 类、DataGrid 类或 Repeater 类),命名容器始终是 Container.DataItem,在Eval()、Bind()方法中,可省略。

 

1。Eval和Bind的 相同绑定方式

绑定表达式
<%# Eval("字段名") %>
<%# Bind("字段名") %>


区别 

1。Eval是只读数据,Bind是可更新的.


2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %>

2.若GridView中绑定列里面 设置 内容格式 DataFormateString ={0:d} ,则 必须把 属性 HtmlCode 设置为false,否则无法起作用;

Eval 单向绑定:数据是只读的
Bind 双向绑定:数据可以更改,并返回服务器端,服务器可以处理更改后的数据,如存入数据库.


 

转载于:https://www.cnblogs.com/vihone/archive/2010/04/28/1723091.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值