Что делает <% # DataBinder.Eval(Container.DataItem, "ColumnName" )%> в шаблоне элементов точно?
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>
Это 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")
точно.?
Спасибо в Advance
Ответы
Ответ 1
Аргумент 1: Container.DataItem
относится к datasource
, привязанному к текущему контейнеру.
Аргумент 2: публичное свойство на DataItem
, которое должно быть оценено.
Итак, Eval использует отражение для оценки публичного свойства на DataItem
.
ex:
В этом случае он оценивает столбец BB
на DataTable
.
Ответ 2
Следующие строки будут выполняться столько раз, сколько количество строк в таблице.
<%# DataBinder.Eval(Container.DataItem,"AA") %>
<%# DataBinder.Eval(Container.DataItem,"BB") %>
<%# DataBinder.Eval(Container.DataItem,"CC") %>
Каждый раз, когда Container.DataItem будет иметь соответствующий DataRowView строк в datatable.
Что происходит в элементе, похоже на этот код.
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