Pergunta

Como faço para definir uma propriedade de um controle de usuário em ListViewde 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.

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top