Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
880
Assunto : ASP.NET
Titulo: Cuidado com a manipulação do RowDataBound

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Frequentemente utilizamos o evento RowDataBound da gridview para a personalização de diversas características das linhas da gridview.

Mas, conforme comento com todos, uma das primeiras coisas a fazer ao programar o evento RowDataBound é testar o RowType (e.row.rowtype). Isso porque o evento RowDataBound ocorre para todas as linhas da grid, tal como Header, Footer, Pager, etc., então precisamos ter certeza de que a execução em questão está acontecendo para uma linha que nos interessa.

Dependendo da operação que estejamos realizando na linha, além do RowType precisaremos testar também o RowState. Isso porque se estivermos manipulando um label ou um determinado botão na linha, pode ser que quando a linha estiver em edição o label ou botão simplesmente não estejam lá.

Neste ponto começam nossos problemas. RowState não é do tipo flags. Então teoricamente poderia aceitar apenas um único valor, o que faria com que um simples teste de rowstate<> edit resolvesse o problema.

Mas não é tão simples assim. Enums, mesmo não sendo marcados com o atributo Flags, podem ter seus valores configurados para permitirem a soma de alguns de seus elementos e não de outros. É exatamente este o caso do RowState.

Trocando em miúdos : uma linha selecionada pode estar em edição ou não. O que, nesses casos, é uma combinação de mais de um estado da linha. Portanto não basta simplesmente comparar o rowState com edit, esperando encontrar um rowstate<> edit , porque quando a linha estiver selecionada e em edição o rowState vai ser diferente de edit.

A solução é fazermos comparação de flags, analises bit a bit.

Se você utilizar um IF assim :

If e.Row.RowType = DataControlRowType.DataRow And e.Row.RowState <> DataControlRowState.Edit Then

End If

Esperando fugir das linhas em edição, terá um erro quando selecionar uma linha e entrar em edição nesta linha. O IF correto fica assim :

If e.Row.RowType = DataControlRowType.DataRow And (e.Row.RowState And DataControlRowState.Edit) <> DataControlRowState.Edit Then

End If

Este if sim, consegue evitar todas as linhas em edição.


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
data: 11/16/2007 12:39:00 AM
nome: Dennes Torres
email: dennes@bufaloinfo.com.br
comentário:
Oi !

Sim, tem razão, apenas complementando, a comparação seria <> e não igual ao RowIndex

[]s

Dennes


data: 11/9/2007 3:19:00 PM
nome: Rodrigo C. Fonseca
email: digo.fonseca@gmail.com
comentário:
Caro Colega,

Informo que não há necessidade de utilizar o objeto DataControlRowState para resolver este problema.

Uma forma mais simple para fazer o que você quer é a listada abaixo:

if (e.Row.RowType = DataControlRowType.DataRow AND [GridView].EditIndex = e.Row.RowIndex)

Atenciosamente,

Rodrigo C. Fonseca
Analista/Desenvolvedor
C#,ASP.NET,VB.Net,Java,ASP,JSP
digo.fonseca@gmail.com


 1  
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br