Validar Modelos com Data Annotation e Windows Form Application C#(CSharp)

Autor : Antonio Carlos Ferreira de Azevedo
Postado em : 07/07/2016


Fazendo Validação de Seus formulários Windows Form Application

Tenho publicado muita coisa sobre validações em Asp.Net MVC com C#, mas e quando precisamos validar nossos formulários Windows Form ?
Vamos lá, é mais fácil do que parece, só precisamos de uma classe para validar nosso modelo e capturar os erros.

Crie uma classe em seu projeto com o nome de ValidacaoWindowsForm.cs copie e cole o código abaixo :

Classe para validar nossos modelos

/* 
 * Atributo Validação Data Annotation Windows Form
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 * 
 * by Antonio Azevedo
 *  
 */
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Windows.Forms;


public static class Validacao
{
    public static IEnumerable<ValidationResult> getValidationErros(object obj)
    {
        var resultadoValidacao = new List<ValidationResult>();
        var contexto = new ValidationContext(obj, null, null);
        Validator.TryValidateObject(obj, contexto, resultadoValidacao, true);
        return resultadoValidacao;
    }

    /// <summary>
    /// Responsavel pela Chamada da validação de nosso Modelo (Esta rotina pode ser Modificada para melhor atender a sua aplicação)
    /// </summary>
    /// <param name="obj">Modelo (Classe)</param>
    /// <returns>(true) se a validação foi feita dom sucesso (False) se encontrou erros Apresenta mensagem com o erros </returns>
    public static Boolean ValidarModelo(object obj)
    {
        var erros = Validacao.getValidationErros(obj);
        string strErros = "";
        foreach (var error in erros)
        {
            //MessageBox.Show((error.ErrorMessage));
            strErros += error.ErrorMessage + Environment.NewLine;
        }
        if (strErros.Length>0)
        {  
            // Se existirem erros apresenta Mensagem com a listagem de erros, 
            // você pode modificar esta classe para retornar a listagem dos erros e apresentar em um label em seu formulario 
            strErros = "Corrija os problemas abaixo: " + Environment.NewLine + Environment.NewLine + strErros;
            MessageBox.Show(strErros, "Erros", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return false;
        }

        return true;
    }
}


Obs: Caso tenha problemas com System.ComponentModel.DataAnnotations adicione novamente esta referencia em seu projeto utilizando a versão mais recente.

Utilizando os Atributos Customizados

Você pode utilizar os Atributos Customizados apresentados em nossas postagens, (DataBrasil, EmailBrasil, etc) basta retirar os itens relacionados ao MVC e JavaScript.

O que devemos retirar

Na clausula Using a referencia ao MVC using System.Web.Mvc

Retirar a referencia a extensão IClientValidatable deixando nossa classe somente com referencia a extensão ValidationAttribute
Exemplo de como deve ficar o Atribute EmailBrasil:public class EmailBrasilAttribute : ValidationAttribute

Retire as diretivas para validação do lado do Cliente, implementa com jquery.validate
para localizar a diretiva pesquise no código por: public IEnumerable<ModelClientValidationRule> GetClientValidationRules

Com estas modificações nossos atributos customizados vão funcionar perfeitamente.


Segue o Exemplo da Classe Aluno com atributos de validação

/* 
 * Atributo Validação Data Annotation Windows Form
 * 
 * Visite nossa página http://www.codigoexpresso.com.br
 * 
 * by Antonio Azevedo
 *  
 */
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;

namespace ValidacaoWindowsForm
{
    class ModAluno
    {
        [Display(Name = "Código")]
        [Range(1, 999, ErrorMessage="Código Aluno deve estar entre 1 e 999")]
        public int Id { get; set; }

        [Display(Name = "Nome")]
        [Required(ErrorMessage = "Nome é obrigatório.")]
        [RegularExpression(@"^[a-zA-Z''-'\s]{1,40}$", ErrorMessage =
            "Nome, números e caracteres especiais não são permitidos.")]
        public string Nome { get; set; }

        [EmailBrasil(EmailRequerido=true,ErrorMessage="E-mail inválido")]
        public string Email { get; set; }

        [Display(Name = "Data Cadastro")]
        [DataBrasil(DataRequerida=true,ErrorMessage="Data de Cadastro inválida")]
        public DateTime? Cadastro {get;set;}
    }
}


Como validar seu modelo ?

Para validar seu modelo simplesmente pegue os dados se seu formulário e grave em seu modelo, depois carregue a rotina de validação passando como parâmetro seu modelo, se retornar true, seu modelo foi validado e você pode prosseguir salvando seus dados, se retornar false existe(m) erro(s) na validação de seu modelo, neste caso a rotina apresenta uma mensagem com a lista de erro encontrados antes de retornar.

Exemplo do botão salvar de nosso formulário

private void btnGravar_Click(object sender, EventArgs e)
{
    ModAluno aluno = new ModAluno();
    try
    {
        aluno.Id = Convert.ToInt32(txtID.Text);
    }
    catch
    {
        aluno.Id = 0;
    }

    try
    {
        aluno.Cadastro = Convert.ToDateTime(txtCadastro.Text);
    }
    catch
    {
        aluno.Cadastro = null;
    }

    aluno.Nome = txtNome.Text;
    aluno.Email = txtEmail.Text;

    if (Validacao.ValidarModelo(aluno)==true)
    {
        // Coloque aqui sua rotina para salvar seus dados

        MessageBox.Show("Registro salvo com sucesso !", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}


Se você não entendeu todos os passo baixe o código fonte da aplicação com exemplo da validação funcionando no link abaixo :



Links Relacionados



Comentários