none
Comportamiento de los métodos CellClick() y SelectionChanged() RRS feed

  • Pregunta

  • Hola!

    Estoy practicando con Entity Framework y Linq y me encuentro con que, en el momento de "refrescar" los datos de un formulario, según me desplazo por un DatagridView después de eliminar una fila, me salta un error al recibirse un objeto "vacío"

    Si uso el método SelectionChanged() es cuando falla, pero si uso el método CellClick todo va normal. La cosa es que quería usar el método SelectionChanged() para que fueran actualizándose los controles al desplazarse por el grid.

    ¿Dónde puede estar el error?

    //En la capa de Presentación:

    Private Sub EliminarArtículoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EliminarArtículoToolStripMenuItem.Click Dim IDArticulo As Integer = dgvListado.CurrentRow().Cells(0).Value Lógica.EliminarArticulo(IDArticulo) Lógica.LoadGridArticulos(dgvListado) End Sub

    Private Sub dgvListado_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvListado.CellClick

            txtBuscar.Enabled = True
            Dim IDArticulo As Integer = dgvListado.CurrentRow().Cells(0).Value
            Dim Articulo As Articulos = Lógica.MostrarArticulo(IDArticulo)

    // Aquí da el error sólo si uso el método SelectionChanged()

            txtIDArticulo.Text = Articulo.IDArticulo
            cboSeccion.SelectedValue = Articulo.IDSeccion
            cboGrupo.SelectedValue = Articulo.IDGrupo
            cboCategoria.SelectedValue = Articulo.IDCategoria
            cboFamilia.SelectedValue = Articulo.IDFamilia
            cboProveedor.SelectedValue = Articulo.IDProveedor
            cboTallaje.SelectedValue = Articulo.IDTallaje
            txtDescripcion.Text = Articulo.Descripcion
            txtPCT.Text = Articulo.PCT
            txtoPCO.Text = Articulo.PCO
            txtPVP.Text = Articulo.PVP
            txtPMC.Text = Articulo.PMC
            txtActualizacion.Text = Articulo.Actualizacion

        End Sub

    // En la capa de Lógica

    Shared Sub EliminarArticulo(IDArticulo As Integer)

            Try
                Dim Articulo = (From item In Contexto.Articulos Where item.IDArticulo = IDArticulo Select item).SingleOrDefault
                Contexto.Articulos.Remove(Articulo)
                Contexto.SaveChanges()
                MsgBox("Artículo eliminado")

            Catch ex As Exception
                MsgBox("Se ha producido un error:" & vbCrLf & ex.Message)
            End Try

        End Sub

    Shared Sub LoadGridArticulos(datagrid As DataGridView)

            Dim Articulo = (From art In Contexto.Articulos
                            Join sec In Contexto.Secciones On art.IDSeccion Equals sec.IDSeccion
                            Join gru In Contexto.Grupos On art.IDGrupo Equals gru.IDGrupo
                            Join cat In Contexto.Categorias On art.IDCategoria Equals cat.IDCategoria
                            Join fam In Contexto.Familias On art.IDFamilia Equals fam.IDFamilia
                            Join pro In Contexto.Proveedores On art.IDProveedor Equals pro.IDProveedor
                            Select New With {Key .Código = art.IDArticulo,
                                                Key .Artículo = art.Descripcion,
                                                Key .Sección = sec.Descripcion,
                                                Key .Grupo = gru.Descripcion,
                                                Key .Categoría = cat.Descripcion,
                                                Key .Familia = fam.Descripcion,
                                                Key .Proveedor = pro.Descripcion,
                                                Key .PCO = art.PCO,
                                                Key .PVP = art.PVP
                                              }
                             ).ToList


            datagrid.DataSource = Articulo.ToList()


        End Sub





    • Editado R_Jorge martes, 27 de junio de 2017 18:05
    • Cambiado Joyce_AC miércoles, 28 de junio de 2017 17:56
    martes, 27 de junio de 2017 18:03

Respuestas

  • Buenas R_Jorge,

    Si utlizas onSelectionChanged, cambia

    Dim IDArticulo As Integer = dgvListado.CurrentRow().Cells(0).Value
    
    //Por
    
    Dim IDArticulo As Integer = dgvListado.SelectedRows[0].Cells(0).Value


    y en las propiedades de selección del datagridview, deshabilita el multiselect (esto al iniciar el form) :

    dgvListado.MultiSelect = false
    

    Prueba y nos comentas.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    • Marcado como respuesta R_Jorge jueves, 29 de junio de 2017 20:39
    jueves, 29 de junio de 2017 13:30

Todas las respuestas

  • Buenas R_Jorge,

    Si utlizas onSelectionChanged, cambia

    Dim IDArticulo As Integer = dgvListado.CurrentRow().Cells(0).Value
    
    //Por
    
    Dim IDArticulo As Integer = dgvListado.SelectedRows[0].Cells(0).Value


    y en las propiedades de selección del datagridview, deshabilita el multiselect (esto al iniciar el form) :

    dgvListado.MultiSelect = false
    

    Prueba y nos comentas.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    • Marcado como respuesta R_Jorge jueves, 29 de junio de 2017 20:39
    jueves, 29 de junio de 2017 13:30
  • Muchas gracias Jorge, funcionó perfectamente!
    jueves, 29 de junio de 2017 20:40