stackexchange12
stackexchange12

Reputation: 652

Input Validation for an integer in DataGridView

I'm able to use the code below to check whether or not a user inputs a string in a datagridview cell. If the user inputs a string a message pops up to tell them "only numeric entries are allowed". This is exactly what I want my code to do. However if I try to use this code in a column of data populated with numbers I get an error message that says "error happened, parsing commit". If anyone is able to figure out what the issue is here I would greatly appreciate it!

If (e.ColumnIndex = 3) Then 'checking numeric value for column 3 only
        Dim value As String = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
        For Each c As Char In value
            If Not Char.IsDigit(c) Then
                MessageBox.Show("Please Enter numeric Value")
                DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 3 'This will set the defaultvalue of the datagrid cell in question to the value of "3"
                Exit Sub
            End If
        Next
    End If

Upvotes: 2

Views: 11583

Answers (2)

stackexchange12
stackexchange12

Reputation: 652

This solution not only checks for non-integer values it also works for every column populated with numbers for the entire datagridview. Also if the user inputs a non-integer if will supply a default value for the datagridviewcell, this default value is the previous number.

Private Sub DataGridView1_DataError(ByVal sender As Object, _
ByVal e As DataGridViewDataErrorEventArgs) _
Handles DataGridView1.DataError

    If StrComp(e.Exception.Message, "Input string was not in a correct format.") = 0 Then
        MessageBox.Show("Please Enter a numeric Value") 
        'This will change the number back to original
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = " "
    End If




End Sub

Upvotes: 3

matzone
matzone

Reputation: 5719

Do this in cellvalidating event ...

If (e.ColumnIndex = 3) Then 'checking numeric value for column 3 only

    If Not Isnumeric(e.Formatted.Value) Then

        MessageBox.Show("Please Enter numeric Value")
        DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 3 'This will set the defaultvalue of the datagrid cell in question to the value of "3"
        Exit Sub

    End If

End If

Upvotes: 2

Related Questions