none
RowState NO se actualiza en DataGridView

    Pregunta

  • Hola a todos:

    Tengo un DataGridView cuyo origen de datos es un DataTable. En el DataGridView únicamente tengo activada la opción de Edición (sin Agregar ni Eliminar)...

    Al editar el contenido de una celda y cambiarme a la siguiente celda de la misma fila analizo los datos del DataRow (con el fin de depuración), observando que el contenido ha sido actualizado exitosamente, sin embargo, el RowState del DataRow permanece en Unchanged.

    Haciendo otra prueba de edición, noto que al cambiarme a una celda de una fila diferente, esta vez sí me cambia el RowState a Modified.

    ¿Qué debo hacer para que al terminar la edición de la celda actual y cambiarme a otra celda de la misma fila se actualice también el RowState del DataRow del origen de datos?

    Estoy utilizando VB.NET 2008

     

    Saludos y gracias de antemano,

    jgardesa

    jueves, 25 de noviembre de 2010 22:17

Respuestas

  • "jgardesa" escribió:

    > Al editar el contenido de una celda y cambiarme a la siguiente celda
    > de la misma fila analizo los datos del DataRow (con el fin de depuración),
    > observando que el contenido ha sido actualizado exitosamente, sin embargo,
    > el RowState del DataRow permanece en Unchanged.
    >
    > Haciendo otra prueba de edición, noto que al cambiarme a una celda de una
    > fila diferente, esta vez sí me cambia el RowState a Modified.
    >
    > ¿Qué debo hacer para que al terminar la edición de la celda actual y
    > cambiarme a otra celda de la misma fila se actualice también el RowState
    > del DataRow del origen de datos?

    Hola:

    Me parece que vas a poder hacer poco, porque la propiedad RowState es de sólo lectura. Aparte que ese comportamiento es de lo más natural, porque el valor de la propiedad RowState se modifica cuando se cambia de fila, o el control DataGridView pierde el foco, pero no cuando se cambia de columna dentro de una misma fila. Si hubiera una propiedad "CellState" que nos indicara el estado de la celda, tendrías el asunto resuelto, pero para bien o para mal, no existe tal propiedad.

    Podrías instalar un controlador para el evento RowChanged del objeto DataTable enlazado con el control DataGridView, el cual se desencadenará cuando se cambia de fila:

        Private Sub DataTableOnRowChanged( _
            ByVal sender As Object, ByVal e As DataRowChangeEventArgs)

            If (e.Action = DataRowAction.Change) Then
                ' Estado de la fila
                MessageBox.Show(e.Row.RowState.ToString())

            End If

        End Sub

    Para instalar el controlador, una vez creado el objeto DataTable, ejecutarías lo siguiente:

        AddHandler objetoDataTable.RowChanged, AddressOf DataTableOnRowChanged

    Pero, ¡vamos! Que lo mismo no te sirve para tus propósitos, salvo que desees conocer el motivo de la acción que ha hecho que se desencadene el evento RowChanged, valor que podrás conocer consultando la propiedad Action del parámetro DataRowChangeEventArgs.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    jueves, 09 de diciembre de 2010 14:56

Todas las respuestas

  • A mi me ocurre exactamente lo mismo. Pro favor una ayudita no nos vendria nada mal...

     

    Gracias!

    jueves, 09 de diciembre de 2010 13:13
  • "jgardesa" escribió:

    > Al editar el contenido de una celda y cambiarme a la siguiente celda
    > de la misma fila analizo los datos del DataRow (con el fin de depuración),
    > observando que el contenido ha sido actualizado exitosamente, sin embargo,
    > el RowState del DataRow permanece en Unchanged.
    >
    > Haciendo otra prueba de edición, noto que al cambiarme a una celda de una
    > fila diferente, esta vez sí me cambia el RowState a Modified.
    >
    > ¿Qué debo hacer para que al terminar la edición de la celda actual y
    > cambiarme a otra celda de la misma fila se actualice también el RowState
    > del DataRow del origen de datos?

    Hola:

    Me parece que vas a poder hacer poco, porque la propiedad RowState es de sólo lectura. Aparte que ese comportamiento es de lo más natural, porque el valor de la propiedad RowState se modifica cuando se cambia de fila, o el control DataGridView pierde el foco, pero no cuando se cambia de columna dentro de una misma fila. Si hubiera una propiedad "CellState" que nos indicara el estado de la celda, tendrías el asunto resuelto, pero para bien o para mal, no existe tal propiedad.

    Podrías instalar un controlador para el evento RowChanged del objeto DataTable enlazado con el control DataGridView, el cual se desencadenará cuando se cambia de fila:

        Private Sub DataTableOnRowChanged( _
            ByVal sender As Object, ByVal e As DataRowChangeEventArgs)

            If (e.Action = DataRowAction.Change) Then
                ' Estado de la fila
                MessageBox.Show(e.Row.RowState.ToString())

            End If

        End Sub

    Para instalar el controlador, una vez creado el objeto DataTable, ejecutarías lo siguiente:

        AddHandler objetoDataTable.RowChanged, AddressOf DataTableOnRowChanged

    Pero, ¡vamos! Que lo mismo no te sirve para tus propósitos, salvo que desees conocer el motivo de la acción que ha hecho que se desencadene el evento RowChanged, valor que podrás conocer consultando la propiedad Action del parámetro DataRowChangeEventArgs.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    jueves, 09 de diciembre de 2010 14:56