web-dev-qa-db-fra.com

Que fait <% # dataxier.eval (conteneur.datraitem, "colleName")%> dans le modèle d'élément fait exactement?

Iam utilisant DataList pour la première fois. Tout fonctionne bien et je suis capable de voir les données à l'écran. Je fais un usage de ce code dans le modèle d'article.

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

C'est le DataTable que je suis contraignant

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();

Qu'est-ce que DataBinder.Eval(Container.DataItem,"ColumnName") fait exactement? Merci d'avance

15
Ananth

Argument 1: Container.DataItem fait référence au datasource qui est lié au conteneur actuel.

Argument 2: La propriété publique sur le DataItem qui devrait être évaluée.

Ainsi, Eval utilise la réflexion pour évaluer la propriété publique sur le DataItem.

ex:

Dans vous cas, il évalue la colonne BB sur le DataTable.

16
Vijay Sirigiri

Les lignes suivantes seront exécutées autant de fois que le nombre de lignes dans la table.

<%# DataBinder.Eval(Container.DataItem,"AA") %>
<%# DataBinder.Eval(Container.DataItem,"BB") %>
<%# DataBinder.Eval(Container.DataItem,"CC") %>

Chaque fois conteneur.datraitem aura la correspondance DataRowview des lignes dans le jeu de données.

Que se passe-t-il dans l'article est similaire à ce code.

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());
}

Et la sortie obtenue sera

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

9
Ananth