none
¿Cuál es la mejor práctica de programación en relación a datos no enlazados y DataGridView? (explico)

    Pregunta

  • No estoy seguro cómo proceder, cuál es la mejor práctica de programación en la siguiente situación:

    Necesito visualizar y editar 3 filas a través de un DataGridview cuyos datos no proceden de un gestor de base de datos.

    HICE LO SIGUIENTE

    - Cree una clase cuyas propiedades corresponden a cada columna.

    - En tiempo de diseño asigné al origen de datos del DataGridView dicha clase con el objeto de cargar los encabezados de las columnas y aprovechar su interfaz de diseño para formatear cada columna.

    - Vía código cree una lista del tipo de la clase asignada al DataSource y añadí 3 elementos a la lista

    - A su vez víá código asigno dicha lista (con los datos previamente asignados) al DataSource.

    Ejecuto el programa y el resultado es que visualizo los datos asignados vía código y con cada columna tal como la formatee en tiempo de diseño. Hasta allí según yo todo ok (corríjanme si estoy errado y no es la mejor forma de proceder).

    LA DUDA

    Lo que no me queda claro es cuál es la manera correcta (o en todo caso la mejor práctica de programación) para editar las filas vía código una vez visualizada la tabla.

    Entiendo que como la lista está enlazada al control DataGridView puedo asignar o cambiar los datos editando un elemento particular de la lista refenciando su índice o cambiando los valores de una celda en particular del DataGridView a través de CurrentCell por ejemplo o con DataGridView1(columna, fila).Value = UnValor

    La pregunta es cómo debería hacerlo:

    ¿Editando un elemento de la lista (referenciada por un índice) o editando las celdas del DataGridView usando sus propiedades?

    Fundamenten un poquito porfa para entender. Cualquier observación o sugerencia es bienvenida.




    • Editado James-2016 martes, 11 de octubre de 2016 19:49
    martes, 11 de octubre de 2016 19:32

Respuestas

  • Hola James-2016,

    Es correcto, si enlazas una lista de una clase "X" las columnas se generan de las propiedades que esta tenga.

    [-] ... Lo que no me queda claro es cuál es la manera correcta (o en todo caso la mejor práctica de programación) para editar las filas vía código una vez visualizada la tabla.

    Cuando el DataGridView está bindeada por un lista, se debe hacer uso de la propiedad DataBoundItem para obtener el objeto de la lista que será editada y/o eliminada.

    Ejemplo :

        Public Class MiClase
            Public Property codigo As String
            Public Property nombre As String
        End Class

    - Cargo algunos valores (omito esta parte, para no alargar la respuesta).

    - Cambiar el valor de las propiedades de una fila.

    Private Sub btnEditar_Click(sender As Object, e As EventArgs) Handles btnEditar.Click
    
            'Si la fila actual no es nula
            If DataGridView1.CurrentRow IsNot Nothing Then
    
                'Obtengo los valores de la fila actual
                Dim mic As MiClase = TryCast(DataGridView1.CurrentRow.DataBoundItem, MiClase)
    
                'Si el objeto no es nulo
                If mic IsNot Nothing Then
    
                    'Cambio las propiedades
                    mic.codigo = "New Code"
                    mic.nombre = "New Name"
    
                    'Actualizo el DGV
                    DataGridView1.Refresh()
                End If
            End If
        End Sub

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 martes, 11 de octubre de 2016 21:15
    martes, 11 de octubre de 2016 20:08
  • Hola James-2016,

    Es prácticamente lo mismo, solo cambiaría :

    'Fila 3 (índice 2)
    Dim mic As MiClase = TryCast(DataGridView1.Rows(2).DataBoundItem, MiClase)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 martes, 11 de octubre de 2016 21:15
    martes, 11 de octubre de 2016 20:31

Todas las respuestas

  • Hola James-2016,

    Es correcto, si enlazas una lista de una clase "X" las columnas se generan de las propiedades que esta tenga.

    [-] ... Lo que no me queda claro es cuál es la manera correcta (o en todo caso la mejor práctica de programación) para editar las filas vía código una vez visualizada la tabla.

    Cuando el DataGridView está bindeada por un lista, se debe hacer uso de la propiedad DataBoundItem para obtener el objeto de la lista que será editada y/o eliminada.

    Ejemplo :

        Public Class MiClase
            Public Property codigo As String
            Public Property nombre As String
        End Class

    - Cargo algunos valores (omito esta parte, para no alargar la respuesta).

    - Cambiar el valor de las propiedades de una fila.

    Private Sub btnEditar_Click(sender As Object, e As EventArgs) Handles btnEditar.Click
    
            'Si la fila actual no es nula
            If DataGridView1.CurrentRow IsNot Nothing Then
    
                'Obtengo los valores de la fila actual
                Dim mic As MiClase = TryCast(DataGridView1.CurrentRow.DataBoundItem, MiClase)
    
                'Si el objeto no es nulo
                If mic IsNot Nothing Then
    
                    'Cambio las propiedades
                    mic.codigo = "New Code"
                    mic.nombre = "New Name"
    
                    'Actualizo el DGV
                    DataGridView1.Refresh()
                End If
            End If
        End Sub

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 martes, 11 de octubre de 2016 21:15
    martes, 11 de octubre de 2016 20:08
  • aaah jajaja no era ni lo uno, ni lo otro, era obteniendo la referencia a la fila. Se entendió el ejemplo, muchas gracias.

    Entonces, en lugar de CurrentRow en esta línea, puedo obtener la referencia a cualquier otra fila a través de su índice noo? (si no es muy pedir cómo sería para una fila arbitraria, por ej. fila 3, esa línea nomás)

     Dim mic As MiClase = TryCast(DataGridView1.CurrentRow.DataBoundItem, MiClase)
    

    martes, 11 de octubre de 2016 20:26
  • Hola James-2016,

    Es prácticamente lo mismo, solo cambiaría :

    'Fila 3 (índice 2)
    Dim mic As MiClase = TryCast(DataGridView1.Rows(2).DataBoundItem, MiClase)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta James-2016 martes, 11 de octubre de 2016 21:15
    martes, 11 de octubre de 2016 20:31
  • Gracias.
    martes, 11 de octubre de 2016 21:15