none
Validar Campos ao inserir RRS feed

  • Pergunta

  • Olá Galera.. 

    Toda vez salvo os campos no banco de dados... preciso antes tratar os dados dos textBox, correto?
    Caso contrário diversos erros ocorrem. Por exemplo: 

        Tenho que verificar se o campo no Banco de Dados é obrigatório, se for, exige que tenha informação
        
        Tenho que Verificar Se o campo é inteiro, se for, converter o texto do texbox em int32, mas se o textBox esta vazio insere Zero ou Null se permitir.
            
        Tenho que Verificar Se o campo é String, se for, converte tudo em Maiuscula, tira espaços iniciais e finais (trim), espaços duplicados no meio, mas se o textbox estiver vazio insere null se permitir.
        
        Esses são apenas uns exemplos

        

    Não queria estar fazendo todas essas validacoes, em todos os formularios do sistema.
    Acredito que o C# já nos permite uma automatização desses processos.

    Qual seria uma maneira mais profissional de fazer isso.. de forma que não fique if else if um abaixo
    Como vocês fazem? ou qual seria o ideal a se fazer?
    quarta-feira, 6 de julho de 2016 02:41

Respostas

  • Consegui O/

    Estava colocando a validacao antes de preencher a entidade cliente.

    essas expressoes funcionaram

    [Display(Name = "Nome do Cliente")]
            [Column(Order = 1)]
            [Required(ErrorMessage = "O campo {0} é obrigatório")]
            [MinLength(2, ErrorMessage = "O campo {0} deve ter no mínimo {1} caracteres")]
            [MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]

    para email

    [RegularExpression(".+\\@.+\\..+", ErrorMessage = "O campo {0} e-mail é inválido")]

    porem, com data não consegui.. visto que a data é do tipo DateTime

    como tenho que preencher a entidade com os valores... 
    o campo data que é do tipo DateTime nao vai aceitar uma data invalida

    conseguintemente nao vai verificar na validacao dos annotations
    vissto que a data já tem que estar validada antes

    como poderia resolver isso?

    sexta-feira, 8 de julho de 2016 14:05
  • Se você estiver trabalhando com algum componente para tratar datas sim, se estiver utilizando caixa de texto somente com a formatação esta vai aceitar qualquer valor que você digite inclusive 99/99/9999, 

    o que fiz foi mostrar como validar Data Annotation em Windows form, os exemplos são ilustrativos, 


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    segunda-feira, 11 de julho de 2016 18:39

Todas as Respostas

  • Olha uma forma "ja pronta" de se fazer essas validações eu desconheço, o que você pode fazer é criar metodos que lhe auxilie nessas tarefas, como testar se o campo é nulo ou vazio, testar se é numerico e alterar para maiusculo ou minusculo, eu faço essas validações porém crio metodo para agilizar o processo mas nunca vi nada "pronto" para isso ... para campos requeridos no seu Banco de Dados você pode usar as exceptions geradas caso um campo seja NOT NULL em sua tabela, para facilitar sua validação, lembrando que uma boa validação de entrada de dados lhe pouco problemas

    Junior

    quarta-feira, 6 de julho de 2016 10:35
  • o ideal seria métodos em uma nova classe da camada de visualização?

    ou métodos extensivos?

    quarta-feira, 6 de julho de 2016 12:16
  • utilize Data Annotation colega, você faz toda sua validação nas suas classe, veja esta postagem para entender http://www.codigoexpresso.com.br/Home/Postagem/27

    Você pode também criar atributos de validação personalizados veja aqui um exemplo de atributo para validar data customizado 

    http://www.codigoexpresso.com.br/Home/Postagem/35

    Assista as vídeo aulas deste curso http://www.codigoexpresso.com.br/Home/Postagem/32 da aula 04 a 08 falamos somente de validações, é para Asp.Net MVC com C# se estiver trabalhando somente com c# basta retira a parte para tratamento do lado do cliente JQuery.

    Visite estes links que vai gosta e aprender a fazer validações com Data Annotation


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    • Editado Código Expresso quarta-feira, 6 de julho de 2016 18:34
    • Marcado como Resposta Thales F Quintas quinta-feira, 7 de julho de 2016 12:56
    • Não Marcado como Resposta DevMaicon sexta-feira, 8 de julho de 2016 06:41
    quarta-feira, 6 de julho de 2016 18:33
  • pelo que estive lendo, a maioria das annotations nao funcionam para windows forms

    cheguei tentar, mas não consegui mesmo.

    por exemplo, na classe do cliente, coloquei as seguintes annotation

    [Display(Name = "Nome")]
            [Required(ErrorMessage = "O campo {0} é obrigatório")]
            [MinLength(2, ErrorMessage = "O campo {0} deve ter no mínimo {1} caracteres")]
            [MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]
            public string Nome { get; set; }

    entao criei o metodo de validar 

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


    e no botao salvar criei essa validacao

         
           foreach (var error in ValidacaoForms.getErrosValidacao(cliente))
                {
                    MessageBox.Show((error.ErrorMessage)); // MENSAGEM DO ERRO
                    return;
                }

    mas nao funciona de jeito algum

    sabe o que pode ser?

    sexta-feira, 8 de julho de 2016 06:49
  • Consegui O/

    Estava colocando a validacao antes de preencher a entidade cliente.

    essas expressoes funcionaram

    [Display(Name = "Nome do Cliente")]
            [Column(Order = 1)]
            [Required(ErrorMessage = "O campo {0} é obrigatório")]
            [MinLength(2, ErrorMessage = "O campo {0} deve ter no mínimo {1} caracteres")]
            [MaxLength(100, ErrorMessage = "O campo {0} deve ter no máximo {1} caracteres")]

    para email

    [RegularExpression(".+\\@.+\\..+", ErrorMessage = "O campo {0} e-mail é inválido")]

    porem, com data não consegui.. visto que a data é do tipo DateTime

    como tenho que preencher a entidade com os valores... 
    o campo data que é do tipo DateTime nao vai aceitar uma data invalida

    conseguintemente nao vai verificar na validacao dos annotations
    vissto que a data já tem que estar validada antes

    como poderia resolver isso?

    sexta-feira, 8 de julho de 2016 14:05
  • Colega acabei de fazer uma postagem sobre este assunto em minha pagina, lá você vai encontra uma classe pronta para fazer a validação inclusive para um campo data além de todo o procedimento para aprimorar sua aplicação e ainda pode baixar o código funcionando com validações para Windows Form Application, segue o link.

    Postagem :  http://www.codigoexpresso.com.br/Home/Postagem/62

    Código fonte Funcional : https://github.com/CodigoExpresso/Codigo-Fonte-Rotina-Validacao-Data-Annotation-Windows-Form

     
    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    sexta-feira, 8 de julho de 2016 17:11
  • muito bom amigo.. parabéns pelo artigo

    muito obrigado

    sucesso no site 

    sexta-feira, 8 de julho de 2016 18:21
  • Só um detalhe...

    Me corrija se estiver errado por favor,
    mas no meu ver a data nunca será validada.

    pois se tem que passar o objeto cliente.. e o atributo data é do tipo DateTime, eu já tenho que inserir uma data valida no objeto, entao ela já esta certa e nunca acusará errado na validacao.

    E se no campo TextBox da data, eu inserir qualquer coisa, ele da erro ANTES da validacao, por nao conseguir inserir o texbbox no objeto DateTime. Nesse caso, ocorre erro antes da validacao.

    como deveria fazer nesse caso? sabe me dizer?


    • Editado DevMaicon sábado, 9 de julho de 2016 23:31
    sábado, 9 de julho de 2016 23:31
  • Se você estiver trabalhando com algum componente para tratar datas sim, se estiver utilizando caixa de texto somente com a formatação esta vai aceitar qualquer valor que você digite inclusive 99/99/9999, 

    o que fiz foi mostrar como validar Data Annotation em Windows form, os exemplos são ilustrativos, 


    Se foi útil e/ou resolveu seu problema, não esqueça de marcar como resposta.
    Visite : www.codigoexpresso.com.br

    segunda-feira, 11 de julho de 2016 18:39