项目模板中的 <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> 究竟做了啥?
Posted
技术标签:
【中文标题】项目模板中的 <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> 究竟做了啥?【英文标题】:What does <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> in the Item Template do exactly?项目模板中的 <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> 究竟做了什么? 【发布时间】:2011-06-16 09:11:27 【问题描述】:我是第一次使用DataList
。一切正常,我可以在屏幕上看到数据。
我正在项目模板中使用此代码。
<asp:DataList ID="DataList1" runat="server">
<FooterTemplate>
</FooterTemplate>
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"AA") %>
<%# DataBinder.Eval(Container.DataItem,"BB") %>
<%# DataBinder.Eval(Container.DataItem,"CC") %>
</ItemTemplate>
</asp:DataList>
这是我绑定的DataTable
DataTable dt = new DataTable();
dt.Columns.Add("AA");
dt.Columns.Add("BB");
dt.Columns.Add("CC");
dt.Rows.Add("1", "2", "3");
dt.Rows.Add("10", "20", "30");
dt.Rows.Add("100", "200", "300");
dt.Rows.Add("1000", "2000", "3000");
DataList1.DataSource = dt;
DataList1.DataBind();
DataBinder.Eval(Container.DataItem,"ColumnName")
究竟做了什么。?
提前谢谢你
【问题讨论】:
以下答案的附录。由于DataBinder.Eval(Container.DataItem,"memberName")
是late-bound,因此性能会受到影响。请参阅这篇文章以了解早期绑定 - 因此更高效且对调试更友好 - 语法:devcurry.com/2011/02/how-to-avoid-databindereval-in-aspnet.html
【参考方案1】:
参数1:Container.DataItem
指的是绑定到当前容器的datasource
。
论据 2:DataItem
上应评估的公共属性。
所以 Eval 使用反射来评估 DataItem
上的公共属性。
例如:
在您的情况下,它会评估 DataTable
上的 BB
列。
【讨论】:
【参考方案2】:以下行将执行的次数与表中的行数一样多。
<%# DataBinder.Eval(Container.DataItem,"AA") %>
<%# DataBinder.Eval(Container.DataItem,"BB") %>
<%# DataBinder.Eval(Container.DataItem,"CC") %>
每次Container.DataItem都会有数据表中对应的DataRowView行。
项目中发生的事情与此代码类似。
DataView dataView = new DataView(dt);
foreach (DataRowView dataRow in dataView)
System.Diagnostics.Debug.WriteLine(DataBinder.Eval(dataRow,"AA").ToString());
System.Diagnostics.Debug.WriteLine(DataBinder.Eval(dataRow,"BB").ToString());
System.Diagnostics.Debug.WriteLine(DataBinder.Eval(dataRow,"CC").ToString());
而得到的输出将是
1 2 3 10 20 30 100 200 300 1000 2000 3000
【讨论】:
以上是关于项目模板中的 <%# DataBinder.Eval(Container.DataItem,"ColumnName") %> 究竟做了啥?的主要内容,如果未能解决你的问题,请参考以下文章
<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")
无法在 http 会话中的休眠对象上使用 DataBinder
Databinder.Eval 和 Container.DataItem 有啥区别?