0 votes
4.4k views
by (1.5k points)

I want to control the values to be entered in Cells of DataGridView.

For example,

  • Numeric Value without or with Decimal Point
  • Currency value with selected characters
  • Email address with Validation

Also, it should accept backspace key too. 

1 Answer

0 votes
by (10.3k points)
You can control DataGridView Cells just like TextBox control, by applying Textbox event. Just see below code you will understand with Cell manipulation technique.
Private Sub DataGridView_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView.EditingControlShowing
    If DataGridView.CurrentCell.ColumnIndex = 2 Then 'Numeric column with decimal point
        AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress

    ElseIf DataGridView.CurrentCell.ColumnIndex = 3 Then 'Numeric column without Decimal
        AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress1

    ElseIf DataGridView.CurrentCell.ColumnIndex = 4 Then 'Selected Values only
        AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress2

    ElseIf DataGridView.CurrentCell.ColumnIndex = 5 Then 'Email Column
        AddHandler CType(e.Control, TextBox).KeyPress, AddressOf TextBox_keyPress3

    End If

End Sub

Private Sub TextBox_keyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs)
    'Allows Numeric values, one decimal point and BackSpace key
    Dim numbers As Windows.Forms.TextBox = sender
    If InStr("1234567890.", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Or (e.KeyChar = "." And InStr(numbers.Text, ".") > 0) Then
        e.KeyChar = Chr(0)
        e.Handled = True
    End If
End Sub

Private Sub TextBox_keyPress1(ByVal sender As Object, ByVal e As KeyPressEventArgs)
    'Allow Numeric values, BackSpace key. Disallows decimal point (i.e. dot) 
    Dim numbers As Windows.Forms.TextBox = sender
    If InStr("1234567890", e.KeyChar) = 0 And Asc(e.KeyChar) <> 8 Then
        e.KeyChar = Chr(0)
        e.Handled = True
    End If
End Sub

Private Sub TextBox_keyPress2(ByVal sender As Object, ByVal e As KeyPressEventArgs)
    'Allow selected values only
    If InStr("1234567890!@#$%^&*()_+=-", e.KeyChar) > 0 Then
        e.KeyChar = Chr(0)
        e.Handled = True
    End If
End Sub

Private Sub TextBox_keyPress3(ByVal sender As Object, ByVal e As KeyPressEventArgs)
    'Martch function, Needs to add "Imports System.Text.RegularExpressions" at the top of Class
    'Allows Email values
    Dim Email As Windows.Forms.TextBox = sender
    If Email.Text <> "" Then
        Dim rex As Match = Regex.Match(Trim(Email.Text), "^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,3})$", RegexOptions.IgnoreCase)
        If rex.Success = False Then
            MessageBox.Show("Please Enter a valid Email Address", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Email.BackColor = Color.Red
            Email.Focus()
            Exit Sub
        Else
            Email.BackColor = Color.White
        End If
    End If
End Sub
...