web-dev-qa-db-fra.com

Accéder aux données parent dans un répéteur imbriqué, dans le HeaderTemplate

Question simple, pas sûr qu'il y ait une réponse simple!

Alors voici le code: (je l'ai beaucoup simplifié pour le rendre plus facile à lire)

<asp:Repeater runat="server>
    <ItemTemplate>
        <asp:Repeater runat="server">
            <HeaderTemplate>
                <h1>My header here for: <%# OuterContainer.DataItem.MyItemName %> </h1>
            </HeaderTemplate>
            <ItemTemplate>
                My items code here
            </ItemTemplate>
        </asp:Repeater>
    </ItemTemplate>
</asp:Repeater>

Comment, dans le modèle d'en-tête, puis-je accéder au DataItem dans le répéteur parent?

56
Paul

J'ai trouvé la réponse en fait:

Utilisation:

<HeaderTemplate>
    <%# ((RepeaterItem)Container.Parent.Parent).DataItem %>
</HeaderTemplate>
90
Paul

La solution donnée par Paul n'a pas fonctionné pour moi, mais cela a fonctionné:

<%# DataBinder.Eval(Container.Parent.Parent, "DataItem.YourProperty")%> 
38
greenoldman

C'est un vieux fil, mais il semble approprié d'ajouter:

Dans mon cas, j'ai 2 contrôles ASPxGridView imbriqués (DevExpress) et Container.Parent.Parent qui ne fonctionnent pas.

Pour accéder à l'élément de données du parent à partir de l'enfant, voici ce qui a fonctionné pour moi:

<%# DataBinder.Eval(Container.NamingContainer.NamingContainer, "DataItem.DbField")%>
8
bobetko

Si je veux récupérer une propriété d'un répéteur parent, je le fais généralement:

<%# DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "ThePropertyName")%>
4
Chad Kuehn

J'ai utilisé comme ci-dessous . Deux répéteurs agissent en tant que parent et enfant.

<%# DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "ID") %>
0
mzonerz