none
ErrorProvider com um DataSet RRS feed

  • Pergunta

  • Pessoal, possuo um Windows Forms, que tem um BindingNavigator e os controles TextBox. Busquei por vários sites na web, como fazer a validação dos textbox direto pelo dataset tipado, mas não consegui nada que realmente pudesse me auxiliar. Alguém tem algum exemplo ou link onde eu possa ver como validar um windows form com binding usando um ErrorProvider ?

    Grato

    Everton

    quinta-feira, 22 de fevereiro de 2007 12:52

Todas as Respostas

  • Everton,

    Para usar o ErrorProvider, você pode fazer o seguinte:

    Coloque um controle ErrorProvider no seu form e no evento Validating do TextBox, coloque o código abaixo.

    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
       if (textBox1.Text != "TESTE")
       {
         errorProvider1.SetError(textBox1,
    "Valor inválido");
       }
       else
       {
          errorProvider1.SetError(textBox1,
    "");
       }
    }

    []s,
    Carlos.

    quinta-feira, 22 de fevereiro de 2007 18:11
  • Everton,

    Você pode fazer isso dentro do arquivo .vb do DataSet tipado. Veja um exemplo:

    Procure a palavra ErrorProvider.

    http://msdn2.microsoft.com/en-us/library/ms379590(vs.80).aspx
    http://msdn2.microsoft.com/en-us/library/ms379590(vs.80).aspx#newdtastvs05_topic4

    quinta-feira, 22 de fevereiro de 2007 18:36
  • Oi Leonardo, o artigo é ótimo, me ajudou bastante, até a conseguir novas informações. Vou testar o new dele, mas encontrei um código para o RowChangeEvent, ele passa por lá quando chama o EndEdit, porém a execução não pára e ele segue para o update, causando e exceção, sem exibir o erro no ErrorProvider.. Eu uso C# e o código tem que ser criado todo, ele não cria automaticamente.. Agradeço desde já o apoio.

    Abraço

    sexta-feira, 23 de fevereiro de 2007 15:34
  • Leonardo, debugando, vi que ele exibe o erro, porém ele dá erro no momento de fazer o update. Tem como eu evitar isso, caso tenha algum erro ?
    sexta-feira, 23 de fevereiro de 2007 15:38
  • Não sei em que ponto você está quando ele gera a exceção, mas você poderia propagar a exceção e na sua rotina que chama o Update trata-la mostrando o erro com o ErrorProvider. Infelizmente essa semana estou sem o VS.NET aqui e não vou poder testar isso, mas em casa vou fazer um teste.
    sexta-feira, 23 de fevereiro de 2007 15:54
  • Oi Leonardo, consegui fazer. Antes do Update, eu coloquei um if, para verificar se tem erros, e apenas caso não tenha, ele realiza o update. Esta é a forma mais correta ou recomenda o uso de exceções para evitar os ifs ?

    Abraço

    Everton

    sexta-feira, 23 de fevereiro de 2007 18:22
  • A forma que você fez é melhor do que tratar a própria exceção, principalmente no que diz  no que diz respeito a performance.
    sexta-feira, 23 de fevereiro de 2007 18:31
  • Que bom. Agora uma outra dúvida. Fui debugar e notei que quando o dataset é carregado, ou a edição é concluída, ou qualquer evento que trabalhe com os dados, o evento de RowChange é disparado.. É possível existir um monte de if para constatação de erros. Em uma base grande, isso pode degradar... tem como limitar os ifs só quando realmente houver alteração nos dados que o usuário efetivamente acessa ? Eu vi que tem a propriedade Action, que vem pelo evento. Vi vários valores possíveis ali.. Se eu limitar os ifs apenas quando a action for Add, ele executa quando o dataset é populado e quando adiciona um novo registro, e se eu coloco change ? Só as mudanças ? O que sugere ?

    Abraço

    sexta-feira, 23 de fevereiro de 2007 19:28
  • Você pode usar o método GetErrors do Datatable para vê se tem erro e ter somente um if verificando se o retorno é verdadeiro ou false de acordo com quantidade de DataRows retornados no array, se for 0 não tem erro.
    sexta-feira, 23 de fevereiro de 2007 19:44