none
Detectar cambios en un datagridview en vb.net RRS feed

  • Pregunta

  • Hola a todos:

    Precisaría conocer la forma de saber correctamente si un datagridview ha sufrido cambios desde su carga en el form.

    Eso lo necesito para poder disparar una serie de eventos si ha habido alguna modificación en sus celdas y si no ha habido dicha modificación no hacer nada, salir del form y ya está, es decir, simplemente serviría el datagridview como consulta de datos.

    He estado mirando por Internet y el que me interesa es la detección en el DatagridView que lo cargo directamente de una tabla de la base de datos.

    Bueno, muchas gracias.

    Un saludo.

    Gemma

    sábado, 21 de noviembre de 2015 9:54

Respuestas

  • Hola Gemma,

    podrías usar el evento CellValueChanged:

        Dim HasChanges As Boolean = False
    
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            HasChanges = True
        End Sub
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta gemma_campillo sábado, 21 de noviembre de 2015 11:48
    sábado, 21 de noviembre de 2015 10:33
  • hola

    si el grid esta enlazado a un DataTable al cambiar algo en una celda esto impacta en el datatable, con lo cual para saber si hay cambiso o no podrias usar

    Dim dt As DataTable = DirectCast(DataGridView1.Datasource, DataTable)
    
    Dim modifTable As DataTable = dt.GetChanges(DataRowState.Modified)
    Dim count As Integer = modifTable.Rows.Count


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta gemma_campillo sábado, 21 de noviembre de 2015 11:50
    sábado, 21 de noviembre de 2015 11:08

Todas las respuestas

  • Hola Gemma,

    podrías usar el evento CellValueChanged:

        Dim HasChanges As Boolean = False
    
        Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            HasChanges = True
        End Sub
    


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta gemma_campillo sábado, 21 de noviembre de 2015 11:48
    sábado, 21 de noviembre de 2015 10:33
  • hola

    si el grid esta enlazado a un DataTable al cambiar algo en una celda esto impacta en el datatable, con lo cual para saber si hay cambiso o no podrias usar

    Dim dt As DataTable = DirectCast(DataGridView1.Datasource, DataTable)
    
    Dim modifTable As DataTable = dt.GetChanges(DataRowState.Modified)
    Dim count As Integer = modifTable.Rows.Count


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta gemma_campillo sábado, 21 de noviembre de 2015 11:50
    sábado, 21 de noviembre de 2015 11:08
  • Hola Asier:

    Gracias por ayudarme.

    Con tu explicación lo he conseguido solucionar, como ya tenía un evento CellValueChanged, lo he modificado un poquito y solucionado.

     Private Sub CellValueChanged(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
            If e.RowIndex = -1 Then
                bolCambiosDatagridView = False
                Return
            Else
                bolCambiosDatagridView = True
            End If
    
            'Obtenemos el Cod_GC al que pertenece la celda pulsada.
            VarGlobal.Codigo = DataGridView1.Rows(e.RowIndex).Cells("Cód_GC").Value.ToString()
            Call SeleccionFilaPulsadaParaActualizar()
    
          
        End Sub

    Muchas gracias como siempre querido Asier.

    Un abrazo.

    Gemma

    sábado, 21 de noviembre de 2015 11:48
  • Hola Leandro:

    No había visto tu respuesta, pero también me funciona perfectamente.

    Muchas gracias como siempre querido amigo.

    Un abrazo.

    Gemma.

    sábado, 21 de noviembre de 2015 11:49