Solución: Modifiqué un poquito el código que encontré aquí: DataGridView con solo números
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing ' referencia a la celda Dim validar As TextBox = CType(e.Control, TextBox) ' agregar el controlador de eventos para el KeyPress AddHandler validar.KeyPress, AddressOf validar_Keypress End Sub
Private Sub validar_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
' evento Keypress
' obtener índice de la columna
Dim columna As Integer = DataGridView1.CurrentCell.ColumnIndex
' comprobar si la celda en edición corresponde a la columna 1 o 2
If columna = 1 Or columna = 2 Then
' Obtener caracter
Dim caracter As Char = e.KeyChar
' referencia a la celda
Dim txt As TextBox = CType(sender, TextBox)
' comprobar si es un número con isNumber, si es el backspace, si el caracter
' es el separador decimal, y que no contiene ya el separador
If (Char.IsNumber(caracter)) Or _
(caracter = ChrW(Keys.Back)) Or _
(caracter = ",") And _
(txt.Text.Contains(",") = False) Then
e.Handled = False
Else
e.Handled = True
End If
End If
End Sub
Gracias a un comentario realizado en mi anterior blog, pude rescatar estas palabras.
Aquí una solución sencilla y con control de decimales.
Private Sub ValidaNro_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
' hay que poner en e format de cada columna un formato numérico para que controle solo números
Dim FormatoColumna As String = Malla.Columns(Malla.CurrentCell.ColumnIndex).DefaultCellStyle.Format.ToString
If FormatoColumna = "" Then Exit Sub
Select Case e.KeyChar
Case "0" To "9", vbBack
e.Handled = False
Case "."
If FormatoColumna.Contains(".") Then
e.Handled = CType(sender, TextBox).Text.Contains(".") ' verifica si ya tiene un punto decimal
Else
e.Handled = True
End If
Case Else
e.Handled = True
End Select
End Sub
Private Sub Malla_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles Malla.EditingControlShowing
Dim ValidarNro As TextBox = e.Control
RemoveHandler ValidarNro.KeyPress, AddressOf ValidaNro_KeyPress
AddHandler ValidarNro.KeyPress, AddressOf ValidaNro_KeyPress
End Sub