FindControl no Repeater com C# e ASP.NET

16/10/2009 in Geek Talk

Hoje fui consultado sobre o método FindControl no Repeater do ASP.NET. Comecei então a pensar no tempo que iniciei o aprendizado em ASP.NET, e tive alguns problemas com o Repeater.

Esse controle é relativamente fácil de se entender, mas na minha opinião, o problema é que ele favorece a “gambiarra“. Ele permite que você insira muita lógica de programação, dentro do arquivo ASPX. Não querendo entrar no mérito de desenvolvimento em camadas, mas se a Microsoft propôs a divisão em um arquivo ASPX e outro do codebehind, é porque ela tinha em mente separar a apresentação do código.  Analisando isso, desde cedo me eduquei a trabalhar com repeater no codebehind e não no ASPX. E uma pergunta que me é feita frequentemente por quem está se acostumando com o desenvolvimento em .NET é: “Como posso manipular um controle que está dentro do repeater no codebehind?”

O caminho natural é programar dentro do evento ItemDataBound do repeater, algo como:

meuRepeater.FindControl(“nomeDoControle”);

Infelizmente, isso não vai te trazer o resultado esperado, pois o seu controle está dentro do ItemTemplate do repeater. O ItemTemplate vai virar um Array de Itens, criando um novo item para cada linha do datasource que você usou para preencher o repeater. Então o correto é tentar achar o controle no Item do repeater e não no repeater diretamente. A sintaxe ficaria algo como:

void meuRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Label lblDescricao = (Label) e.Item.FindControl(“lblDescricao”);
lblDescricao.Text = “Meu novo Texto”;
}

}

No Exemplo acima, utilizamos o RepeaterItemEventArgs que é passado como parametro ao Evento para obter acesso ao Item corrente e procurar nosso Label dentro dele.

E você, tem alguma duvida sobre .NET? Esse artigo não esclareceu sua duvida? Deixe seu comentário ou envie um e-mail que terei prazer em responder.

Leave a reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

You need to log in to vote

The blog owner requires users to be logged in to be able to vote for this post.

Alternatively, if you do not have an account yet you can create one here.

Powered by Vote It Up