Como acessar os controles no modelo de layout do listview?
Pergunta
Como faço para definir uma propriedade de um controle de usuário em ListView
de LayoutTemplate
do code-behind?
<asp:ListView ...>
<LayoutTemplate>
<myprefix:MyControl id="myControl" ... />
</LayoutTemplate>
...
</asp:ListView>
Eu quero fazer isso:
myControl.SomeProperty = somevalue;
Observe que meu controle não está em ItemTemplate
, está dentro LayoutTemplate
, portanto não existe para todos os itens, existe apenas uma vez.Portanto, devo poder acessá-lo uma vez, não para todos os itens vinculados a dados.
Solução
Para definir uma propriedade de um controle que está dentro do LayoutTemplate, basta usar o método FindControl no controle ListView.
var control = (MyControl)myListView.FindControl("myControlId");
Outras dicas
var control = (MyControl)myListView.FindControl("myControlId");
Isso funcionará, mas certifique-se de fazer isso após a ligação de dados ou o LayoutTemplate não terá sido criado, gerando um erro.
Use o EncontrarControl método em cada ListViewItem.
var control = (MyControl)Item.FindControl("yourControlId");
Isso foi respondido nesta pergunta do Stack Overflow:
Acessar um controle dentro do LayoutTemplate de um ListView
Veja o comentário sobre a resposta aceita por tanathos.
Sei que isso foi perguntado há mais de um ano, mas é um dos primeiros resultados do termo de pesquisa que usei para chegar aqui, então queria deixar a resposta para qualquer pessoa que o encontrasse.
O layout é criado e dispara um evento LayoutCreated que informa que o layout foi criado no sistema.
Então, você pode usar listview.FindControl para obter uma referência a esse controle.
Caso você precise da versão VB.net, aqui está:
Dim control = CType(myListView.FindControl("myControlId"), MyControl)