web-dev-qa-db-ja.com

アイテムテンプレートの<%#DataBinder.Eval(Container.DataItem、 "ColumnName")%>は正確に何をしますか?

DataListを初めて使用するIam。すべてが正常に動作し、画面にデータを表示できます。このコードをアイテムテンプレートで使用しています。

_<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")は正確に何をしますか?前もって感謝します

15
Ananth

引数1:Container.DataItemは、現在のコンテナにバインドされているdatasourceを指します。

引数2:評価する必要があるDataItemのパブリックプロパティ。

したがって、Evalはリフレクションを使用してDataItemのパブリックプロパティを評価します。

例:

あなたの場合、BBDataTable列を評価します。

16
Vijay Sirigiri

次の行は、テーブルの行数と同じ回数実行されます。

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

9
Ananth