2009-01-11 15 views
24

¿Cómo accedo a un control en el LayoutTemplate de un control ListView?Acceder a un control dentro de un LayoutTemplate de un ListView

Necesito llegar a litControlTitle y establecer su atributo Text.

<asp:ListView ID="lv" runat="server"> 
    <LayoutTemplate> 
    <asp:Literal ID="litControlTitle" runat="server" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

¿Alguna idea? Tal vez a través del evento OnLayoutCreated?

Respuesta

36

Prueba esto:

((Literal)lv.FindControl("litControlTitle")).Text = "Your text"; 
+0

Intenté eso inicialmente, pero eso no funcionó. Entonces vine aquí. ¡Gracias! – craigmoliver

+3

muy extraño ... coloco este código dentro de la devolución de llamada de OnLayoutCreated, y cuando enlace el ListView funciona bien ... – tanathos

+0

oh, bueno, no lo puse en ese caso, intentándolo ahora – craigmoliver

18

La solución completa:

<asp:ListView ID="lv" OnLayoutCreated="OnLayoutCreated" runat="server"> 
    <LayoutTemplate> 
    <asp:Literal ID="lt_Title" runat="server" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

En CodeBehind:

protected void OnLayoutCreated(object sender, EventArgs e) 
{ 
    (lv.FindControl("lt_Title") as Literal).Text = "Your text"; 
} 
+0

Esto funciona bien – Mahesh

+0

Esta solución es más estable que la de tanathos. Tanathos a veces no funciona cuando DataBind y accede en el mismo método. – Gqqnbig

3

Esta técnica funciona para el diseño de la plantilla; utilizar el evento de inicio del control:

<asp:ListView ID="lv" runat="server" OnDataBound="lv_DataBound"> 
    <LayoutTemplate> 
    <asp:Literal ID="litControlTitle" runat="server" OnInit="litControlTitle_Init" /> 
    <asp:PlaceHolder ID="itemPlaceHolder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    </ItemTemplate> 
</asp:ListView> 

y capturar una referencia al control para su uso en el código subyacente (por ejemplo) en DataBound caso del ListView:

private Literal litControlTitle; 

protected void litControlTitle_Init(object sender, EventArgs e) 
{ 
    litControlTitle = (Literal) sender; 
} 

protected void lv_DataBound(object sender, EventArgs e) 
{ 
    litControlTitle.Text = "Title..."; 
} 
0

Para anidada LV Loop:

void lvSecondLevel_LayoutCreated(object sender, EventArgs e) 
{ 
    Literal litText = lvFirstLevel.FindControl("lvSecondLevel").FindControl("litText") as Literal; 
    litMainMenuText.Text = "This is test"; 
} 
Cuestiones relacionadas