Quiero en esta oportunidad mostrarle un simple ejemplo de validación de datos ingresados en un datagridview. Este es un potente control, muy rico, y con muchísimas opciones de configuración.
Esta validación la haremos controlando el evento CellValidating del datagridview.
Para el ejemplo vamos a necesitar: un formulario y un datagridview. como se ve en la siguiente imagen:
En el evento load del formulario seteamos la propiedad Dock para que el control ocupe todo el formulario y creamos las columnas para el ingreso de los datos.
DataGridView1.Dock = DockStyle.Fill
DataGridView1.Columns.Add("Nombre", "Nombre")
DataGridView1.Columns.Add("Apellido", "Apellido")
DataGridView1.Columns.Add("Cargo", "Cargo")
DataGridView1.Columns.Add("Categoria", "Categoría")
DataGridView1.Columns.Add("Sueldo", "Sueldo")
Ahora veamos la validación.
El evento que manejamos se llama CellValidating y con un select case vamos a validar los datos dependiendo de que columna es la que se está editando. Esto lo sabemos porque consultamos:
DataGridView1.Columns(e.ColumnIndex).Name
Cuando se ingresa un dato no válido debemos completar la propiedad ErrorTex del row que estamos editando con un mensaje de error, el cual aparecerá a la izquierda y lo leemos al colocar el puntero del mouse sobre el icono rojo que aparece.
veamos el codigo:
Private Sub DataGridView1_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
Select Case DataGridView1.Columns(e.ColumnIndex).Name
'El nombre quiero que sea obligatorio, por eso
'no lo dejo salir de la celda hasta que lo ingrese
Case "Nombre"
If String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"El Nombre no puede estar vacío"
e.Cancel = True
End If
Case "Apellido" 'lo mismo pasa con el apellido, es obligatorio
If String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"El Apellido no puede estar vacío"
e.Cancel = True
End If
Case "Cargo"
'En el caso del cargo, tengo cuatro opciones o vacío
'Si no concueda con ninguna no puede salir
If e.FormattedValue.ToString() <> "Vendedor" And _
e.FormattedValue.ToString() <> "Encargado" And _
e.FormattedValue.ToString() <> "Supervisor" And _
e.FormattedValue.ToString() <> "Gerente" And _
e.FormattedValue.ToString() <> "" Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"El dato no es válido: ingrese Vendedor o Encargado o Supervisor o Gerente"
e.Cancel = True
Else
DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
End If
Case "Categoria"
If e.FormattedValue.ToString() <> "A" And _
e.FormattedValue.ToString() <> "B" And _
e.FormattedValue.ToString() <> "C" And _
e.FormattedValue.ToString() <> "" Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"Categorias permitidas: A, B o C"
e.Cancel = True
Else
DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
End If
Case "Sueldo"
'se valida que sea un dato numérico
If Not IsNumeric(e.FormattedValue.ToString()) And Not String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
DataGridView1.Rows(e.RowIndex).ErrorText = _
"Debe ingresar un valor numérico"
e.Cancel = True
Else
DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
End If
End Select
End Sub
Acá les dejo una imagen de como se vería el mensaje de error:
Bueno, como siempre, espero que le puedan dar utilidad y ya saben que pueden mejorar mucho este ejemplo, solo hace falta dedicarle tiempo y ganas!
Información Bitacoras.com…
Valora en Bitacoras.com: Quiero en esta oportunidad mostrarle un simple ejemplo de validación de datos ingresados en un datagridview. Este es un potente control, muy rico, y con muchísimas opciones de configuración. Esta validación la haremos con……
Gracias me has ayudao y me has sacado de un lio.
Gracias, muy interesante. me seria de mucha utiliddad si pudeiras decirme como validar los datos de una base de datos, por ejemplo que el usuario y contrasenia esten en la base de datos, en este caso de sqlserver…. Gracias
Muy bueno. Gracias por el aporte.
MUY BUEN ARTICULO, BASTANTE CLARO… GRACIAS POR EL APORTE
Que buen articulo este y todos los que has publicado siempre das las mejores soluciones solo habia visto maneras super complicadas de validar datagridviews
Buenas..
Me gustaria saber como lleno un datagridview usanto un recordset
gracias
Es un ejemplo muy bueno, en verdad sirve de mucho.
Pero en el sueldo permite pasar si se ingresa un valor negativo, lo cual no debería pasar.
¿Cómo podríamos validar eso?
Gracias…
Saludos a todos
estoy realizando una consulta a una base de datos en access 2007 donde en la parte del where lo comparo con una fecha
ejemplo:
select ….. from …. where fecha = #” & dtpiker.value & “#
y esta no me genera ningún error ni ninguna excepción pero no me retorna nada en el datagridview.
alguien sabe que es lo que sucede ??
gracias a todos….
como hago para validar un dataset con vañores null??
Usa esto
Dim row As DSFacturas.datamovRow
row = CType(CType(Me.DatamovBindingSource.Current, DataRowView).Row, DSFacturas.datamovRow)
If row.IsbodegaNull Then
End If
donde IsbodegaNull es el campo que tiene un valor null, si tu campo se llama prueba la forma de saber si esta null es escribiendo row.ispruebaNull
Tengo el Siguiente DataGridview:
Codigo Descripcion Cantidad Costo
si yo ingreso el codigo automaticamente me muestra la descripcion me da la oportunidad de escribir la cantidad y el costo; pero si se deja el codigo en blanco y me sigo desplazando con el mouse por el grid me sigue creando registros en blanco, como puedo validar que si el codigo esta en blanco no me cree mas filas