2009-09-11 10 views
56

¡Pregunta simple, no estoy seguro de que haya una respuesta simple!Accediendo a los datos principales en el repetidor anidado, en HeaderTemplate

Así que aquí está el código: (He simplificado mucho para que sea más fácil de leer)

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

¿Cómo, en el HeaderTemplate - ¿Puedo acceder al DataItem en el repetidor de los padres?

Respuesta

89

he encontrado la respuesta en realidad:

Uso:

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

y si está en el código subyacente en el método 'ItemDataBound': ' ((RepeaterItem) e.Item.Parent.Parent) .DataItem' – drzaus

+11

En lugar de '.Parent.Parent' (que puede ser incorrecto) use'. NamingContainer'. –

+3

Pero obtengo este error: [InvalidCastException] No se puede convertir el objeto de tipo 'System.Web.UI.WebControls.Repeater' para escribir 'System.Web.UI.WebControls.RepeaterItem'. – sms

36

solución dada por Pablo no funcionó para mí, pero esto hizo:

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

¿Puede decirme por qué' Container.Parent.Parent' en lugar de 'Container.Parent'? – Arbaaz

+0

@Arbaaz esto dependerá de cuántos "padres", es decir, niveles que tenga. por ejemplo, padre de los padres. Es bastante similar en lógica a la forma en que Jquery lo aborda si sabes lo que quiero decir – JazziJeff

+0

Usar la jerarquía NamingContainer es mejor. La jerarquía NamingContainer se puede entender a partir del marcado, mientras que la jerarquía principal puede contener controles adicionales, como la tabla generada por FormView. –

8

Ésta es una vieja hilo, pero parece apropiado agregar:

En mi caso tengo 2 controles anidados ASPxGridView (DevExpress) y Container.P no. El padre no funcionó.

Para acceder elemento de datos de los padres del niño, esto es lo que funcionó para mí:

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

Si quiero recuperar una propiedad de un repetidor padre Me suelen hacer esto:

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