none
Datagridview - Erro com coluna tipo decimal RRS feed

  • Pergunta

  • No meu datagridview, uma das colunas, vinculada diretamente à tabela, tem o tipo decimal(18,2).

    Quando o usuário digita algo diferente de um valor numérico (ou deixa em branco), aparece um erro com a mensagem "A cadeia de caracteres de entrada não estava em um formato incorreto." (deve ser "não estava em formato correto", não?)

    Aparece também: "No Source Available. The call stack contains only external code."

    Acho que tem a ver com o formato.

    Quero que nestes casos o valor seja 0.00, mas não sei como interceptar esse erro.

    Tentei os eventos CellEndEdit e DataError, sem sucesso. Se alguém tiver uma solução, agradeço.

    quarta-feira, 25 de junho de 2014 00:10

Respostas

  •  Entendi,

     Paulo então utilize o evento "CellValidating" veja exemplo :

     Private Sub DataGridView1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    
            If e.ColumnIndex = 0 Then
    
                Dim valor As Integer
    
                If Not Integer.TryParse(Convert.ToString(e.FormattedValue), valor) Then
    
                    e.Cancel = True
                    MessageBox.Show("Insira somente numerico !")
    
                Else
    
                    'seu valor sera inserido !!
    
                End If
    
            End If
    
        End Sub

    • Marcado como Resposta Paulo 15 quarta-feira, 25 de junho de 2014 18:59
    quarta-feira, 25 de junho de 2014 10:40

Todas as Respostas

  •  Olá Paulo,

      você pode usar o evento "KeyUp" de seu DataGrid e fazer sua validação !

    quarta-feira, 25 de junho de 2014 01:59
  • Daniel, não deu certo. Acho que o evento KeyUp não chega a acontecer.

     Private Sub DGV_Sucessores_KeyUp(sender As Object, e As KeyEventArgs) Handles DGV_Sucessores.KeyUp
            Try
                DGV_Sucessores.CurrentRow.Cells(0).Value = Double.Parse(DGV_Sucessores.CurrentRow.Cells(0).Value)
            Catch ex As Exception
                DGV_Sucessores.CurrentRow.Cells(0).Value = 0
            End Try
    
        End Sub

    Tentei também com CellLeave e CellParsing.

    Quando, por exemplo, digito uma letra na célula que deveria ser de número e avanço para outra célula, o erro abre uma guia no projeto, chamada No Source Available.

    quarta-feira, 25 de junho de 2014 02:45
  •  Entendi,

     Paulo então utilize o evento "CellValidating" veja exemplo :

     Private Sub DataGridView1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    
            If e.ColumnIndex = 0 Then
    
                Dim valor As Integer
    
                If Not Integer.TryParse(Convert.ToString(e.FormattedValue), valor) Then
    
                    e.Cancel = True
                    MessageBox.Show("Insira somente numerico !")
    
                Else
    
                    'seu valor sera inserido !!
    
                End If
    
            End If
    
        End Sub

    • Marcado como Resposta Paulo 15 quarta-feira, 25 de junho de 2014 18:59
    quarta-feira, 25 de junho de 2014 10:40
  • Daniel, agora funcionou que é uma beleza. Só que em vez de aparecer uma mensagem, eu queria que a célula já ficasse com valor 0.

    Tentei assim, mas não deu certo:

    Substituí a msgbox por:        DGV_Sucessores.CurrentCell.Value = 0.0

    quarta-feira, 25 de junho de 2014 19:01