我第一次使用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")
到底做了什么。
提前谢谢
答案 0 :(得分:16)
参数1:Container.DataItem
指的是绑定到当前容器的datasource
。
参数2:应评估DataItem
的公共财产。
因此,Eval使用反射来评估DataItem
上的公共属性。
前:
在您的情况下,它会评估BB
上的DataTable
列。
答案 1 :(得分:9)
以下几行将与表中的行数一样多次执行。
<%# 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 三十 100 200 300 1000 2000 3000