Validar Modelos com Data Annotation e Windows Form Application C#(CSharp)
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 MVCusing System.Web.Mvc
Retirar a referencia a extensão
IClientValidatable
deixando nossa classe somente com referencia a extensãoValidationAttribute
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
- Arquitetura CQRS
- Arrays em C#(CSharp)
- Atributo para validar Datas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp).
- Atributo para validar E-mails utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
- Atributo para validar Horas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
- Atributo para validar Números utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp)
- Atributo para validar Senhas utilizando Data Annotation em Asp.Net MVC 4 com C# (CSharp).
- Aula 04 - Validação com Data Annotation (Parte 01) em Asp.Net MVC 4 com C#(CSharp) Visual Studio 2013
- Aula 05 - Validação com Data Annotation (Parte 02) / Mascaras com JQuery-Mask em Asp.Net MVC 4 com C#(CSharp)
- Aula 06 - Validação com Data Annotation (Parte 03) / Números em Asp.Net MVC 4 com C#(CSharp)
- Aula 07 - Validação com Data Annotation (Parte 04) / Validação Remota (Attribute Remote) em Asp.Net MVC 4 com C#(CSharp)
- Aula 08 - Validação com Data Annotation (Parte 05) / Validação E-mail, Senha e Atributo Compare, Ignora Validações em Asp.Net MVC 4 com C#(CSharp)
- C#(CSharp) Converter inteiro para Hexadecimal e Hexadecimal para Inteiro
- C#(CSharp) Exemplo de Conversão de um List<> de uma classe qualquer para um DataTable.
- C#(CSharp) Função para verificar se um determinado número é Primo
- Calcular Idade C# (CSharp), diferença anos entre duas datas
- Classe com Métodos de extensão C# (CSharp)
- Classe para Ler e Gravar Cookies - Asp.Net MVC 4 com C# (CSharp)
- Classe para tratar valores nulos vindos de nossa Query SQL, C#(CSharp).
- Classes anônimas em C#(CSharp)
- Comando nameof() C#(CSharp)
- Compare duas strings ignorando maiúsculas e minúsculas C#(CSharp).
- Consulta SQLServer com paginação
- Criar Classes Dinâmicas usando DynamicObject e ExpandoObject em C# (CSharp)
- Data Annotation em C# (CSharp)
- Definir o dia em um DateTime.
- DELETE CASCADE no SqlServer
- Desvendando o Poder da Função STRING_AGG no SQL Server para concatenação de dados
- Diferença entre parâmetros REF e OUT em C#(CSharp)
- Dígito verificador do CNPJ em C# (CSharp)
- Dígito verificador do CPF em C# (CSharp)
- Emitir sons pelo auto-falante do computador em C# (CSharp)
- Estrangulando um monólito C#(CSharp)
- Exemplo de acesso a dados com SQL Server em C#.
- Exemplo de consulta em SqlServer para encontrar uma chave Estrangeira
- Exemplo de Stored Procedure com tratamento de erros e transação. (SqlServer)
- Explorando Tipos de Dados Personalizados no SqlServer: Utilidade e Impacto na Performance
- Expressões Regulares [RegularExpression]
- Extensões para DataReader, tratando valores de suas consultas SQL (DataReaderExtensions) C#(CSharp)
- Formatar CEP em C# (CSharp)
- Função para devolver data do próximo dia da semana informado C#(CSharp).
- Gerando números randômicos para sorteio de jogos de azar C#(CSharp)
- Grafana Loki e .NET Framework com C#
- Ignorar validações em Data Annotation em C# (CSharp)
- Incrementando e decrementando variáveis em C#(CSharp)
- Injeção de dependência
- Ler string de conexão (connectionStrings) do arquivo Web.config Asp.Net MVC co C#(CSharp)
- Métodos de extensão C#
- ModelBinder - Customizando o vinculo do Modelo com o HTML em Asp.Net MVC 4 com C# (CSharp)
- Ordenando um array com o comando OrderBy C#(CSharp)
- Parar um loop foreach usando o comando break C#(CSharp).
- Protegendo seu site de ataques (CSRF ) com ValidateAntiForgeryToken Asp.Net MVC4 com C#(CSharp)
- Recuperar a URL da página anterior em Asp.Net C# (CSharp)
- Recuperar a URL da página atual em Asp.Net C# (CSharp)
- Recuperar para código C# (CSharp) o valor de um componente de nossa página
- Retorna o IP da conexão do Cliente em Asp.Net MVC com C# (CSharp)
- Retorna os dados do Navegador do Cliente em Asp.Net MVC com C# (CSharp)
- Salvando CSV com cabeçalho no SQL Server Management Studio
- Separar String de caracteres C#(CSharp)
- Serilog e .NET Framework com C#
- Tipos de dados em C# (CSharp)
- Tipos de dados primitivos em C#(CSharp)
- Validando Valores nulos vindos de nosso Banco de Dados C#(CSharp)
- Verificar se uma string é um digito em C# (CSharp)