none
Validação de campos em camadas c# RRS feed

  • Pergunta

  • Boa Tarde,

    Estou tentando validar os campos que estão vazios sei que posso utilizar a função String. IsNullOrEmpty e estou utilizando ela, porem a dificuldade aparece por conta de estar fazendo a verificação em uma classe diferente da qual eu passo os valores segue codigo: 

     ____________ Class Dados_Funcionario_________________
    public void setNome(string nomeFuncionario)
            {
                this.NomeFuncionario = nomeFuncionario;
    
            }
    
            public string getNome() {
                return NomeFuncionario;
            }
    
    ______________Class Controle_funcionario_____________
    
     public bool verificarCampos()
            {
    
                if (String. IsNullOrEmpty(getNome()))
                {
                    throw new Exception("Prencha os campos corretamente");
                    
                   
                }
                else
                {
                    crud.inserirFuncionario();
                    return false;
                }
    
            }
    ___________________ Formulario Funcionario_______________
    try
                {
    
                teste.setNome(TxtNome.Text);
                teste.setCargo(textBox2.Text);
                teste.setDataNasc(textBox1.Text);
                teste.setRG(textBox4.Text);
    
                    controleFunc.verificarCampos();
    
                    
                    MessageBox.Show("Dados Cadastrados corretamente");
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

    O grande problema é que o GetNome retorna sempre um valor vazio para a classe Ctrl_funcionario, porém dentro do formulario podemos visualizar que ele retorna o valor do nome normalmente, como posso fazer para que ele retorne o valor do nome normalmente quando chamado na classe ctrl_funcionario ?

    terça-feira, 22 de novembro de 2016 20:26

Respostas

  • Palomapsj,

    Veja se isto te ajuda.
    Você poderá validar seu formulário antes de enviar os dados para o BD utilizando o erroProvider.
    Arraste o componente para o seu formulário.
    Deixo um exemplo

    1 - Validar Formulário

    public int GetValidaForm() { errorProvider1.Clear(); int nerror = 0;

    // Repita o procedimento para campo que queira validar
    // Neste caso estou validando uma combox foi selecionada if (cboCredor.SelectedValue.ToString() == "0") { errorProvider1.SetError(cboCredor,"Credor não foi selecionado..");
    nerror = nerror+1 }

    return nerror; }

    2 - Gravar dados - Exemplo

            private void btnIncluir_Click(object sender, EventArgs e)
            {

                if (GetValidaForm() == 0) // Se não retornar erro os dados serão gravados.
                {
    // Aquí você coloca o seu codigo, ou faz uma chamada para inserir dados.
                }
            }


    // Caso contrário aparecerá vários alertas nos campos inválidos do formulário.


    JoseBonfim

    quarta-feira, 23 de novembro de 2016 22:23

Todas as Respostas

  • Olá Paloma,

    Provavelmente o problema que está tendo é que está trabalhando com objetos (instâncias da classe) diferentes no momento de atribuir o valor e no momento de verificar. 

    Perceba, quando você chama o método verificarCampos, você não passa nenhum objeto para que ele faça essa verificação. Resumindo, para você garantir que está trabalhando com o mesmo objeto em diversas classes, é necessário passar esse objeto por parâmetro para os métodos que for utilizar.

    Na sua classe de verificação dos campos teria que ser algo mais ou menos assim:

    ______________Class Controle_funcionario_____________
    
    public bool verificarCampos(Funcionario func)
    {
    
      if (String.IsNullOrEmpty(func.getNome()))
      {
        throw new Exception("Prencha os campos corretamente");               
      }
      else
      {
        crud.inserirFuncionario();
        return false;
      }
    }

    OBS: Estou assumindo que o nome da sua classe em questão seja Funcionario, mas não sei pois você não descreveu isso.

    Espero ter esclarecido!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 22 de novembro de 2016 23:06
  • Boa noite, 

    Fui testar, porém acredito que cai em outro paradigma, para poder utilizar a classe Funcionario como parametro no metodo verificarCampos é necessario adicionar como referencia o projeto a qual esta a classe Funcionario, porém não é possivel devido a eu estar referenciando o projeto atual aode se encontra o metodo verificarCampo na classe Funcionario :|

    quarta-feira, 23 de novembro de 2016 01:07
  • Pois é, você não contextualizou como está sua solução, quantos projetos tem, etc. Mas de qualquer forma o problema não foge do que falei. Você deve estar com problemas por estar manipulando objetos diferentes e precisa de alguma forma trabalhar com o mesmo objeto (tanto na atribuição de valores quanto na validação dos mesmos)

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quarta-feira, 23 de novembro de 2016 02:05
  • Siim, e como posso resolver este problema ? 
    quarta-feira, 23 de novembro de 2016 12:27
  • Paloma,

    Como já comentei, você tem que trabalhar com o mesmo objeto (tanto na atribuição de valores quanto na validação dos mesmos).

    Vou dar um exemplo do errado (o que eu acho que está ocorrendo ai) e depois do correto.

    Errado

    public class Funcionario
    {
        public int ID {get; set;}
        public string Nome {get; set;}
        
        public string getNome()
        {
            return Nome;
        }
    }
    
    
    public void Cadastrar()
    {
       var funcionario = new Funcionario();
       funcionario.ID = 1;
       funcionario.Nome = "Teste";
       
       if (ValidarCampos())
          //CADASTRAR
       else
          //ERRO
    }
    
    
    public bool ValidarCampos()
    {
       var funcionario = new Funcionario();
       if (!string.IsNullOrEmpty(funcionario.getNome()))
           return true;
       else
           return false;
    }

    Certo:

    public class Funcionario
    {
        public int ID {get; set;}
        public string Nome {get; set;}
        
        public string getNome()
        {
            return Nome;
        }
    }
    
    
    public void Cadastrar()
    {
       var funcionario = new Funcionario();
       funcionario.ID = 1;
       funcionario.Nome = "Teste";
       
       if (ValidarCampos(funcionario))
          //CADASTRAR
       else
          //ERRO
    }
    
    
    public bool ValidarCampos(Funcionario funcionario)
    {
       if (!string.IsNullOrEmpty(funcionario.getNome()))
           return true;
       else
           return false;
    }

    Perceba que a diferença está apenas que eu utilizo o mesmo objeto, onde criei e adicionei valores para cadastrar (funcionario) para validar os dados (tanto que eu passo esse objeto por parâmetro para o método de validação).

    A questão de divisão em projetos e classes diferentes (como comentou que é o seu sistema) não interfere nesse conceito. É bem visível, se tiver objetos diferentes ou criados de forma separada, certamente eles não serão a mesma coisa.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quarta-feira, 23 de novembro de 2016 12:46
  • Palomapsj,

    Veja se isto te ajuda.
    Você poderá validar seu formulário antes de enviar os dados para o BD utilizando o erroProvider.
    Arraste o componente para o seu formulário.
    Deixo um exemplo

    1 - Validar Formulário

    public int GetValidaForm() { errorProvider1.Clear(); int nerror = 0;

    // Repita o procedimento para campo que queira validar
    // Neste caso estou validando uma combox foi selecionada if (cboCredor.SelectedValue.ToString() == "0") { errorProvider1.SetError(cboCredor,"Credor não foi selecionado..");
    nerror = nerror+1 }

    return nerror; }

    2 - Gravar dados - Exemplo

            private void btnIncluir_Click(object sender, EventArgs e)
            {

                if (GetValidaForm() == 0) // Se não retornar erro os dados serão gravados.
                {
    // Aquí você coloca o seu codigo, ou faz uma chamada para inserir dados.
                }
            }


    // Caso contrário aparecerá vários alertas nos campos inválidos do formulário.


    JoseBonfim

    quarta-feira, 23 de novembro de 2016 22:23
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 25 de novembro de 2016 12:14
    Moderador