什么<%#DataBinder.Eval(Container.DataItem,“ColumnName”)%>在项目模板中做到了吗?

时间:2011-01-27 07:57:42

标签: c# .net asp.net data-binding datalist

我第一次使用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")到底做了什么。 提前谢谢

2 个答案:

答案 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