Что именно делает <% # DataBinder.Eval (Container.DataItem, "ColumnName")%> в шаблоне элемента? - PullRequest
15 голосов
/ 27 января 2011

Я использую 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 ]

16 голосов
/ 27 января 2011

Аргумент 1: Container.DataItem относится к datasource, связанному с текущим контейнером.

Аргумент 2: Общественная собственность на DataItem, которая должна быть оценена.

Таким образом, Eval использует отражение для оценки публичной собственности на DataItem.

например:

В вашем случае он оценивает столбец BB на DataTable.

9 голосов
/ 27 января 2011

Следующие строки будут выполняться столько раз, сколько строк в таблице.

<%# 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

...