c# asp.net listview asp.net-3.5

c# - Acceda a un control dentro de LayoutTemplate de ListView



asp.net asp.net-3.5 (4)

¿Cómo LayoutTemplate un Control en LayoutTemplate de un control ListView ?

Necesito llegar a litControlTitle y establecer su atributo de 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 ?


Esta técnica funciona para el diseño de la plantilla; use el evento init 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 capture una referencia al control para usar en el código subyacente (por ejemplo) en el evento DataBound de 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..."; }


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 código subyacente:

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


Para Nested LV Loop:

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


Prueba esto:

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