数据网格视图方法中绑定数据有什么区别?

时间:2011-01-03 05:46:47

标签: asp.net

数据网格视图方法中绑定数据的区别是什么?

 <ItemTemplate>
    <asp:LinkButton ID="lnkBtnUserName" runat="server" 
   Text='<%# DataBinder.Eval(Container.DataItem,"UserFirstName")%>'
                                            CommandArgument='<%# Eval("UserID") %>' OnClick="lnkBtnUserName_Click" />
                                    </ItemTemplate>

和第二个

 <asp:TemplateField HeaderText="Employee ID">
      <ItemTemplate>
          <asp:Label ID="lblempid" runat="server" Text='<%# Bind("EmpId.EmpId") %>'></asp:Label>
      </ItemTemplate>
</asp:TemplateField>

表示

方法1

Text='<%# DataBinder.Eval(Container.DataItem,"UserFirstName")%>'
          CommandArgument='<%# Eval("UserID") %>' 

方法2

Text='<%# Bind("EmpId.EmpId")

还解释在第一个中使用这个CommandArgument='<%# Eval("UserID") ????

1 个答案:

答案 0 :(得分:0)

Eval("UserID")之类的呼叫对应TemplateControl.Eval方法调用,并且其本身实际上会转换为DataBinder.Eval(GetDataItem(), "UserID")之类的呼叫。总之,Eval是DataBinder.Eval的简写语法 - 在内部检查第一个参数,并根据其类型,它将尝试解析第二个参数 - 例如,对于数据行,它将尝试解析为列名而对于普通对象,它将使用反射来解析属性名称。

Bind是一种特殊语法,会导致在编辑时使用的双向绑定,即控件将从数据源获取值(类似于Eval),并且还会将(修改的)值更新回数据源。 AFAIK,Bind不对应于方法调用(作为Eval),而是ASP.NET编译器会吐出必要的代码以确保双向数据绑定。

请参阅数据绑定表达式概述:http://msdn.microsoft.com/en-us/library/ms178366.aspx