C# - Validando dados com Data Annotations com Windows Forms
A validação dos dados é uma tarefa essencial em qualquer aplicação seja ela desktop, mobile, para web,etc. A lógica de validação pode variar muito de aplicação para aplicação e pode se tornar um processo trabalhoso. |
A partir da versão 4.0 da plataforma .NET temos a disposição no namespace System.ComponentModel.DataAnnotations, classes de atributos que são usadas para definir metadados e que podemos usar para realizar a validação dos dados.
Esse recurso é muito usado em aplicações ASP .NET MVC mas podemos usá-lo em qualquer tipo de aplicação. Neste artigo eu vou mostrar como usar o recurso em uma aplicação Windows Forms e em uma aplicação Console usando a linguagem C#.
Recursos usados:
Data Annotations - Conceitos Básicos
Os atributos Data Annotations foram introduzido no .NET 3.5 como uma forma de adicionar a validação para as classes usadas por aplicações ASP.NET. Desde aquela época, o RIA Services começou a usar anotações de dados e eles agora fazem parte do Silverlight também. No EF o Code-First permite que você construa um EDM usando código (C#/VB .NET) e também permite realizar a validação com atributos Data Annotations.
Para este recurso devemos usar o namespace System.ComponentModel.DataAnnotations pois é ele que provê atributos de classes (usados para definir metadados) e métodos que podemos usar em nossas classes para alterar as convenções padrão e definir um comportamento personalizado que pode ser usado em vários cenários.
Os principais atributos usados para validação são:
1- Required - Obriga a entrada de um campo especificado.
[Required]
public string Nome { get ; set}
|
Parâmetros: ErrorMessage - Define a mensagem de erro; e AllowEmptyStrings - Define se são permitidos valores em branco;
[Required(ErrorMessage="O nome do usuário é obrigatório",AllowEmptyStrings=false)]
public string Nome { get; set; }
|
2- RegularExpression - Permite usar expressões regulares em validações mais específicas
[Required(ErrorMessage
= "Informe o seu email")] [RegularExpression(".+\\@.+\\..+",ErrorMessage = "Informe um email válido...")] public string Email { get; set; } |
3- Display - Define o texto que será visível para uma propriedade quando usada em um campo de formulário
[Required(ErrorMessage="O
nome do usuário é obrigatório",AllowEmptyStrings=false)] [Display(Name = "Nome do Usuário")] public string UserName { get; set; } |
4- StringLength - Determina a quantidade máxima de caracteres que poderá ser informada
[Required] [Display(Name = "Informe a Senha")] [StringLength(10,MinimumLength=4)] public string Password { get; set; } |
O parâmetro MinimumLength define a quantidade mínima de caracteres permitida
5- DataType - Associa um tipo adicional a uma propriedade
[Required] [DataType(DataType.Password)] [StringLength(10,MinimumLength=4)] [Display(Name = "Password")] public string Password { get; set; } |
No exemplo acima a propriedade Password que é do tipo String possui um tipo adicional Password definido.
6- DisplayFormat - Aplica um formato definido a uma propriedade
[Required] [Display(Name = "Data do pedido")] [DisplayFormat(DataFormatString = "mm/dd/yyyy")] public DateTime Datapedido { get; set; } |
[Required] [Display(Name = "Preco do Produto")] [DisplayFormat(DataFormatString = "{0,c}")] public decimal PrecoProduto { get; set; } |
7- Range - Define um intervalo para uma propriedade onde a validação será aplicada
[Required] [Display(Name = "Idade do beneficiário")] [Range(18,65)] public int idadeBeneficiario { get; set; } |
Criando o projeto
Abra o Visual Studio 2012 Express for desktop e clique em FILE -> New Project selecionando o template Windows Forms Application informando o nome ValidandoComDataAnnotations e clique em OK;
A primeira ação que deveremos fazer é incluir uma referência ao namespace System.ComponentModel.DataAnnotations em nosso projeto.
No menu PROJECT clique em Add Reference e a seguir marque o item Assemblies selecionando o namespace e clicando no botão OK, conforme abaixo:
Agora vamos definir uma classe chamada Aluno que será objeto da nossa validação via Data Annotations.
No menu PROJECT clique em Add Class e informe o nome Aluno.cs. A seguir digite o código abaixo nesta classe:
using System.ComponentModel.DataAnnotations;
namespace
ValidandoComDataAnnotations
//Nome
//Email
//Idade |
Estamos aplicando os atributos Data Annotations a cada campo da classe Aluno fazendo as seguintes validações:
Campo:
Id - Deve estar
entre 1 e 99999
Nome - É obrigatório e não permite caracteres especiais
Email - É Obrigatório e deve possuir entre 5 e 100 caracteres
Idade - Deve estar entre 15 e 24 anos
Agora vamos definir uma classe getValidationErros que será responsável pela validação.
No menu PROJECT clique em Add Class e informe o nome Aluno.cs. A seguir digite o código abaixo nesta classe:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ValidandoComDataAnnotations
{
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 ;
}
}
}
|
Neste exemplo queremos validar a entidade Aluno e para isso estamos usando o método Validator.TryValidateObject(), que determina se o objeto especificado é válido, passando os seguintes parâmetros:
Nota: A classe Validator define uma classe auxiliar que pode ser usada para validar objetos, propriedades, métodos e quando é incluída em seus atributos associados de ValidationAttribute .
O método retorna uma lista de erros preenchidos com os objetos ValidationResult que descrevem os erros se a validação falhar ou vazios quando o objeto supera as restrições impostas.
Para testar a validação vamos incluir no formulário form1.cs a entrada do usuário via TextBox e botões de comando. Ao clicar no botão Gravar iremos fazer a validação usando as classes já definidas. Abaixo temos o formulário para validação:
No formulário vamos criar a rotina para exibir as mensagens de erro com o código a seguir:
private void ValidarAluno(object obj)
{
var erros = Validacao.getValidationErros(obj);
foreach (var error in erros)
{
MessageBox.Show((error.ErrorMessage));
}
}
|
No evento Click do botão de comando vamos inserir o código abaixo onde chamamos a rotina ValidarAluno():
private void btnGravar_Click(object sender, EventArgs e)
{
Aluno _aluno = new Aluno();
_aluno.Id = Convert.ToInt32(txtID.Text);
_aluno.Nome = txtNome.Text;
_aluno.Email = txtEmail.Text;
_aluno.Idade = Convert.ToInt32(txtIdade.Text);
ValidarAluno(_aluno);
}
|
Abaixo vemos a validação em ação:
O exemplo é bem simples e pode ser melhorado, mas mostra que podemos usar os recursos da Data Annotations em aplicações Windows Forms.
Pegue o projeto completo aqui: ValidandoComDataAnnotations.zip
Rom 14:7 Porque nenhum de nós vive para si, e nenhum morre para si.
Rom 14:8 Pois, se vivemos, para o Senhor vivemos; se morremos, para o Senhor morremos. De sorte que, quer vivamos quer morramos, somos do Senhor.
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#