项目模板中的<%#DataBinder.Eval(Container.DataItem,"ColumnName")%>到底是做什么的?

Ana*_*nth 15 .net c# asp.net data-binding datalist

Iam 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>
Run Code Online (Sandbox Code Playgroud)

这就是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();
Run Code Online (Sandbox Code Playgroud)

究竟DataBinder.Eval(Container.DataItem,"ColumnName")做了什么.先感谢您

Vij*_*iri 16

参数1:Container.DataItem指的datasource是绑定到当前容器的.

参数2:DataItem应评估的公共财产.

所以Eval使用反射来评估公共财产DataItem.

例如:

在你的情况下,它评估的BBDataTable.


Ana*_*nth 9

以下行将与表中的行数一样多次执行.

<%# DataBinder.Eval(Container.DataItem,"AA") %>
<%# DataBinder.Eval(Container.DataItem,"BB") %>
<%# DataBinder.Eval(Container.DataItem,"CC") %>
Run Code Online (Sandbox Code Playgroud)

每次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());
}
Run Code Online (Sandbox Code Playgroud)

获得的输出将是

1 2 3 10 20 30 100 200 300 1000 2000 3000