Validando un DataGridView

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:

validardatagridview001

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:

validardatagridview002

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!



12 Responses to “Validando un DataGridView”

  1. 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……

  2. Luis dice:

    Gracias me has ayudao y me has sacado de un lio.

  3. Karla dice:

    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

  4. Ocellum dice:

    Muy bueno. Gracias por el aporte.

  5. veros dice:

    MUY BUEN ARTICULO, BASTANTE CLARO… GRACIAS POR EL APORTE

  6. packoo dice:

    Que buen articulo este y todos los que has publicado siempre das las mejores soluciones solo habia visto maneras super complicadas de validar datagridviews

  7. Borro dice:

    Buenas..

    Me gustaria saber como lleno un datagridview usanto un recordset

    gracias

  8. amakakeo dice:

    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…

  9. Javier dice:

    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….

  10. walter dice:

    como hago para validar un dataset con vañores null??

    • RAM dice:

      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

  11. RAM dice:

    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

Comentar