Criando custom controls – CheckBoxList com AutoValidação

 

Alguma vez para resolver um problema você precisou utilizar 2 ou mais controles ASP.NET e ao mesmo tempo pensou: Porque não existe um único controle com todas essas funcionalidades?

 

Para resolver esse problema, você utilizar um template de WebControlLibrary e criar controles com as funcionalidades que você precisa para sua toolbar.

 

O que queremos

 

Precisamos de um CheckBoxList que tenha uma propriedade do tipo boolean, onde possamos informar se o controle requer alguma informação ou não.

 

A Base

 

Crie um projeto de WebControlLibrary com seu Visual Studio 2005. O Nome do meu projeto é “CheckBoxList AutoValidator” e com ele foi criado o namespace CheckBoxList_AutoValidator.

 

Quando o projeto é criado, com ele temos uma classe WebCustomControl1.cs criada também. Exclua essa classe e vamos criar outra classe a partir do template WebCustomControl chamada de MyCheckBoxList.

 

É criada junta com a nova classe uma propriedade default chamada Text. Vamos altera - lá para o nosso propósito.

 

Altere o valor Category para “Custom”, o valor da propriedade , altere o nome da propriedade de Text para AutoValidator. Apague a diretiva DefaultPorperty. O valor da diretiva DefaultValue deverá ser igual a true. Será necessário alterar o tipo de dados de String para Boolean da propriedade AutoValidator e fazer com que a classe herde de CheckBoxList e não de WebControl. O Resultado da sua classe será igual à Listagem 01.

 

NET-25-02-2008pic01.JPG 

Listagem 01 – Código da inicial da classe do MyCheckBoxList.

 

Com isso nós já temos um controle com uma propriedade customizada. Temos agora criar um método para a “Auto Validação”. Então altere a assinatura da classe para que a mesma além de herdar de CheckBoxList, implemente a Interface IValidator.

 

Implementando IValidator

 

Você será obrigado a implementar um método de assinatura void Validate(), e duas propriedades, bool IsValid e string ErrorMessage.

 

Veja a Listagem 02 à implementação.


NET-25-02-2008pic02.JPG 

Listagem 02 – Trechos obrigatórios após implementar a interface IValidator.

 

Ainda não começamos a programar o método Validate(). Antes de começar a escrever o código de validação vamos relembrar o que vamos fazer para ter certeza que o controle contém dados inválidos.

 

Vamos percorrer todos os itens do CheckBoxList e se existir pelo menos 1 selecionado, o controle é válido. Então vamos ver a implementação de código do método Validate na Listagem 03.

 

NET-25-02-2008pic03.JPG 

Listagem 03 – Validação do controle.

 

Agora mais um detalhe antes de finalizar e testarmos o controle. Temos que garantir que a página realmente não seja submetida por falha da nossa validação. Vamos isso adicionado o nosso controle dentro dos Validators no momento de validação, dentro do “Ciclo de vida de página” (Page Life Cycle). Para maiores detalhes sobre o assunto acesse ASP.NET Page Life Cycle Overview. Veja na Listagem 04 o código para executarmos essa ação.

 

NET-25-02-2008pic04.JPG
Listagem 04 –
Adicionando o controle na coleção de Validators da página.

 

Para testar tudo o que foi feito até agora, compile o projeto. Copie a DLL que estará dentro da pasta bin/debug para um outro local (Sugestão: C:\Arquivos de programas\Microsoft Visual Studio 8\Common7\IDE), adicione o seu controle customizado na toolbar (clique com o botão direito no mouse e escolha a opção “Choose Items” e selecione a DLL na pasta onde você a copiou).

 

Agora com o seu custom control na toolbar, você precisa apenas de uma aplicação web para teste. A página onde ocorrerá o teste deverá conter apenas o seu controle e um sumary validator para capturar a mensagem de erro que você personalizou. O resultado dever ser algo muito parecido com a Figura 01.

 

NET-25-02-2008pic05.JPG 

Figura 01 – Imagem a esquerda com erro e a direita sem erro.

 

Agora é só personalizar ainda mais os seus controles.

Até a próxima.

 

Daniel Cazé