Acessar um controle dentro de um a LayoutTemplate de um ListView
-
10-07-2019 - |
Pergunta
Como faço para acessar um controle na LayoutTemplate
de um controle ListView
?
Eu preciso chegar a litControlTitle
e defina seu 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>
Todos os pensamentos? Talvez via o evento OnLayoutCreated
?
Solução
Tente isto:
((Literal)lv.FindControl("litControlTitle")).Text = "Your text";
Outras dicas
A solução 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>
No código por trás:
protected void OnLayoutCreated(object sender, EventArgs e)
{
(lv.FindControl("lt_Title") as Literal).Text = "Your text";
}
Esta técnica funciona para layout de modelo; usar o evento init do controle:
<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>
E capturar uma referência para o controle para uso no código-behind (por exemplo) no evento DataBound do 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...";
}
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";
}
No caso de você precisa da versão VB, aqui está
Dim litControl = CType(lv.FindControl("litControlTitle"), Literal)
litControl.Text = "your text"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow