2009-09-11 11 views
56

Einfache Frage, nicht sicher, es gibt eine einfache Antwort!Zugriff auf übergeordnete Daten in verschachtelten Repeater, in der HeaderTemplate

Also hier ist der Code: (I vereinfacht habe es viel, um es leichter zu lesen)

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

Wie in der Header - kann ich die DataItem Zugriff in dem übergeordneten Repeater?

Antwort

89

Ich habe die Antwort tatsächlich gefunden:

Verwendung:

<HeaderTemplate> 
    <%# ((RepeaterItem)Container.Parent.Parent).DataItem %> 
</HeaderTemplate> 
+4

und wenn Sie sind in Code-Behind in der 'ItemDataBound' Methode: ' ((RepeaterItem) e.Item.Parent.Parent) .DataItem' – drzaus

+11

Anstelle von '.Parent.Parent' (was falsch sein kann) verwenden'. NamingContainer'. –

+3

Aber ich erhalte diesen Fehler: [InvalidCastException] Kann Objekt vom Typ 'System.Web.UI.WebControls.Repeater' nicht umwandeln, um 'System.Web.UI.WebControls.RepeaterItem' einzugeben. – sms

36

Lösung von Paul gegeben hat bei mir nicht funktioniert, aber das tat:

<%# DataBinder.Eval(Container.Parent.Parent, "DataItem.YourProperty")%> 
+1

Können Sie mir sagen, warum' Container.Parent.Parent' anstelle von 'Container.Parent'? – Arbaaz

+0

@Arbaaz das wird davon abhängen, wie viele "Eltern", dh Ebenen, die Sie haben. zB Elternteil des Elternteils. Es ist ziemlich ähnlich in der Logik, wie jQuery es anwendet, wenn Sie wissen, was ich meine – JazziJeff

+0

Verwenden der NamingContainer-Hierarchie ist besser. Die NamingContainer-Hierarchie kann anhand des Markups verstanden werden, während die Parent-Hierarchie zusätzliche Steuerelemente wie die von FormView generierte Tabelle enthalten kann. –

8

Dies ist ein alter Thread, aber es scheint richtig hinzuzufügen:

In meinem Fall habe ich 2 verschachtelte ASPxGridView-Steuerelemente (DevExpress) und Container.P arent.Parent hat nicht funktioniert.

Um Eltern Datenelement von Kind zugreifen, ist es das, was für mich gearbeitet:

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

Wenn ich eine Eigenschaft eines übergeordneten Repeater abrufen möchte ich dies in der Regel tun:

<%# DataBinder.Eval(((RepeaterItem)Container.Parent.Parent).DataItem, "ThePropertyName")%> 
Verwandte Themen