数据网格视图方法中绑定数据的区别是什么?
<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")
????
答案 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