none
Input string was not in a correct format RRS feed

  • Pergunta

  • Olá,

     

    Tenho um Windows Application com C# e estou desenvolvendo uma tela simples de cadastro. Na tabela (access), o campo Matrícula é um Integer e permite Nulo. No meu Form, o campo textfield referente ao campo "Matrícula" está associado ao campo Matrícula do meu funcionariosBingingSource. Fiz esta associação através da opção Databinding >>Advanced [...] das propriedades do campo.

    No momento de executar a tela, se o usuário for na opção "Add New..." do funcionariosBindingNavigator e inserir um novo registro SEM a inclusão do campo Matrícula, OK!!! Os dados são inseridos corretamente na base de dados. Porém, se o usuário entrar com o valor Matrícula, mesmo que por engano, e tentar apagar (deixar o campo vazio), a tela não permite que o usuário tire o foco do campo até que o valor digitado seja um Numérico. Até este momento, não vejo muito problema. O problema maior que vejo é que se o usuário tentar apagar o conteúdo digitado ele também não consegue tirar o foco do campo. Este "problema"  também ocorre quando o registro já existe cadatrado com um valor numérico cadastrado no campo Matrícula e o usuário tenta apagar o conteúdo deste campo e salvar.

    Finalmente, se ajustar a opção CausesValidation do campo para False, então é permitido que o usuário tire o foco do campo quando o conteúdo for apagado, mas o Update do funcionariosTableAdapter não atualiza corretamente, pois também entende que o valor informado não é válido. Mesmo nulo? Como pode ser tratado este caso? Como faço para permitir tirar o foco do campo quando informado nulo?

     

    Obrigado.

    quarta-feira, 23 de maio de 2007 16:50

Todas as Respostas

  • Veja bem, quando você apaga o coteúdo de um campo, ele fica com string vazia e não nulo. Logo, como o seu campo aceita somente números e nulo, quando chega uma string vazia dá erro.
    quarta-feira, 23 de maio de 2007 17:29
  • Sim, mas como resolver?

    Como permitir que o usuário apague (deixando uma string vazia), e fazer nossos objetos de acesso a dados entenderem que estou digitando um valor Null e não uma string vazia? Tem como eu converter para um DBNull antes de passar para minha camada de persistência?

     

    Obrigado, abraços.

    quarta-feira, 23 de maio de 2007 17:44
  • Bem, eu estou sem o VS agora e não lembro como fazer isso gráficamente. Mas via código você pode usar o evento Parse do objeto Bind. Mais ou menos assim:

     

    Dim b As Binding = Me.txtMatricula.DataBindings("Text")

    AddHandler b.Parse, AddressOf TrataNulo

     

    Private Sub TrataNulo(ByVal sender As Object, ByVal e As ConvertEventArgs)
            If String.IsNullOrEmpty(e.Value.ToString) Then
                e.Value = DBNull.Value
            End If
      End Sub

    quarta-feira, 23 de maio de 2007 18:12
  •  

    no meu caso esse erro só acontece quando passo o sistema pro ar.

     

    segue a consulta no bd

     

    "select a.codigo, a.cod_imovel, a.titulo, a.referencia, a.valor, b.descricao, c.descricao as bairro from imovel a, tipo b, bairro c where  a.bairro = c.codigo  and a.tipo = b.codigo  and a.tipo = 4 order by RND(a.cod_imovel)"

     

    o valor do tipo eu pego por querystring
    quinta-feira, 10 de janeiro de 2008 16:45