DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
post favorito     comentários

Utilizando CustomValidator para validar CheckBoxList – Parte 02

Vamos nesse artigo continuar utilizando o controle CustomValidator.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo

 

 

O problema

 

No artigo anterior aprendemos a validar um CheckBoxList. Mas se você quiser validar mais de um CheckBoxList nas mesma página? Você responde prontamente: basta criar um CustomValidator para cada instância de CheckBoxList e um método de validação.

 

Mas se os campos não existirem em tempo de design? Se o seu formulário for dinâmico e você precisar criar e validar campos em tempo de execução? E se os campos puderem ser do tipo CheckBoxList? Então precisamos criar uma rotina que valide todos os controles existentes na página.

 

A solução

 

Crie um projeto de WebSite em C# com seu visual studio 2005. Na página default.aspx arraste um GridView e código dentro da tag deve ficar igual a Listagem 01.


wm-29-01-2008pic06.JPG 

Listagem 01 – Código da tag da default.aspx

 

Porém para simular essa situação precisamos criar um código que crie controles em tempo de execução. Para isso vamos escrever o código da página default.aspx.cs igual a Listagem 02 e criar um arquivo xml chamado enquête.xml na pasta App_Data com o conteúdo igual a Listagem 03. Vamos utilizar um modelo simples de enquête apenas para ilustrar a criação de
controles em tempo de execução e a validação de forma dinâmica que foco desse artigo.


wm-29-01-2008pic07.JPG



wm-29-01-2008pic08.JPG


wm-29-01-2008pic09.JPG

 


wm-29-01-2008pic10.JPG
Listagem 02 –
Default.aspx.cs

 

 

Listagem 03 – Conteúdo do arquivo enquete.xml
wm-29-01-2008pic11.JPG

 

Método GridView1_RowDataBound

 

Nesse método ocorre a criação dos controles em tempo de execução através do método Eval da classe DataBinder recuperamos do DataSource os valores da Ordem e do Tipo do controle relacionado a pergunta da pesquisa. Logo após carregamos um DataSet com o conteúdo do arquivo enquetes.xml. O valor do tipo de controle é utilizado no laço switch para sabermos qual classe devemos instanciar.

Caso o tipo seja igual a CheckBoxList então instanciamos um objeto do tipo CheckBoxList, atribuímos os valores das propriedades DataTextField, DataValueField e DataSource e executamos o método Databind. Dessa forma temos um controle que foi criado em tempo de execução e carregados com os dados que precisamos. Como o controle já “existe” podemos inseri-lo na célula que está contida na linha que está sendo criada nesse momento no GridView1.

Veja que fazemos referência à célula de índice zero (e.Row.Cells[0].Controls.Add()) porque no nosso GridView só temos uma coluna. Na maioria dos casos existem mais colunas, então você pode obter o índice da coluna dinamicamente através de um laço foreach.

 

O procedimento citado acima é repetido para os demais controles, sendo alterado apenas as classes dos respectivos controles.

 

Método ValidaCampos

 

Esse método é responsável pela validação pois está associado ao evento OnServerValidate do CustomValidator. O método iniciar percorrendo todas as linhas do GridView1 através de um laço foreach. Dentro desse primeiro laço, criamos um segundo laço foreach para percorrer a coleção de controles existente na célula de índice 0 (zero) em cada linha.

Devemos apenas nos lembrar que a referência da célula 0 (zero) só é feita de forma direta, pois o nosso GridView só tem uma coluna.

Dentro do segundo laço, fazemos o teste se o tipo do controle atual é igual a um valor esperado por nós. Porém a comparação é feita através da propriedade FullName do método GetType() do controle, pois dessa forma temos certeza que a classe que iremos utilizar ao realizar o Cast (CheckBoxList ck = (CheckBoxList)ctrl;) do tipo do controle, será a classe correta. Após a ter ocorrido o cast, temos um objeto com o tipo correto. Então basta fazer a verificação se a propriedade SelectIndex é igual a -1 e como no artigo anterior atribuir o valor para a variável args.

 

wm-29-01-2008pic12.JPG 

Figura 01 – Campos requeridos.

 

Agora é só personalizar a sua aplicação.

Até a próxima.

 

Daniel Cazé



Daniel Santiago da Silva Cazé (dsscaze@gmail.com) trabalha com desenvolvimento de aplicações web para intranet e SIGs a 6 anos. Desenvolve trabalhos de Data WareHouse e administração de dados com SQL Server 2000/2005. MCP [...]

O que você achou deste post?
Conhece a assinatura MVP?
Publicidade
Serviços

Mais posts