none
Como: Soluciono este error. C# RRS feed

  • Pregunta

  • "No se puede eliminar filas mediante programación a menos que DataGridView esté enlazado a datos con IBindingList que admita la notificación de cambios y permita la eliminación."

    este error me sale en esta linea de código:

    private void dgvProductos_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right)
                {
                    this.dgvProductos.Rows[e.RowIndex].Selected = true;
                    this.rowIndex = e.RowIndex;
                    this.dgvProductos.CurrentCell = this.dgvProductos.Rows[e.RowIndex].Cells[1];
                    this.contextMenuStrip1.Show(this.dgvProductos, e.Location);
                    contextMenuStrip1.Show(Cursor.Position);
                }
            }
    
          
            private void contextMenuStrip1_Click(object sender, EventArgs e)
            {
                if (!this.dgvProductos.Rows[this.rowIndex].IsNewRow)
                {
                    this.dgvProductos.Rows.RemoveAt(this.rowIndex);
                }

    Aun no comprendo el porque, a pesar de ser claro el error. 


    Dave Castañeda. CCS - VENEZUELA.

    jueves, 15 de febrero de 2018 15:27

Respuestas

  • Aunque no se aprecia en el fragmento de código que has mostrado, sospecho que debe existir en algún sitio (puede ser en el .designer.cs) un DataBinding aplicado el dgvProductos. Si el objeto que se le puso en el DataSource no permite recibir las notificaciones de cambios, entonces no te permite borrar una fila en el dgv, porque el objeto vinculado no es capaz de replicar automáticamente ese cambio.

    Si no necesitas el databinding, eliminalo (se puede hacer sobre la marcha poniendo dgvProductos.DataSource=null, pero si los datos se tomaron a través del datasource eso hará que el dgv se vacíe de datos). Y si sí que lo necesitas, entonces haz el borrado de la fila sobre el objeto vinculado en lugar de borrala sobre el Grid, y deja que el vínculo propague el borrado al Grid. O cambia el objeto vinculado por uno que permita el vínculo bidireccional (por ejemplo, un DataTable).

    jueves, 15 de febrero de 2018 17:19
    Moderador
  • hola

    Si el grid esta enalzado a datos deberias eliminar el valor en la lista que usaste para cargar el grid y luego volver asignar el datasource

    deberias poder reconocer el id o codigo de la entidad de esa row del grid, eliminarla de la lista original que usaste en el grid y luego asignarla nuevamente al datasource del grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de febrero de 2018 17:44

Todas las respuestas

  • Aunque no se aprecia en el fragmento de código que has mostrado, sospecho que debe existir en algún sitio (puede ser en el .designer.cs) un DataBinding aplicado el dgvProductos. Si el objeto que se le puso en el DataSource no permite recibir las notificaciones de cambios, entonces no te permite borrar una fila en el dgv, porque el objeto vinculado no es capaz de replicar automáticamente ese cambio.

    Si no necesitas el databinding, eliminalo (se puede hacer sobre la marcha poniendo dgvProductos.DataSource=null, pero si los datos se tomaron a través del datasource eso hará que el dgv se vacíe de datos). Y si sí que lo necesitas, entonces haz el borrado de la fila sobre el objeto vinculado en lugar de borrala sobre el Grid, y deja que el vínculo propague el borrado al Grid. O cambia el objeto vinculado por uno que permita el vínculo bidireccional (por ejemplo, un DataTable).

    jueves, 15 de febrero de 2018 17:19
    Moderador
  • hola

    Si el grid esta enalzado a datos deberias eliminar el valor en la lista que usaste para cargar el grid y luego volver asignar el datasource

    deberias poder reconocer el id o codigo de la entidad de esa row del grid, eliminarla de la lista original que usaste en el grid y luego asignarla nuevamente al datasource del grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de febrero de 2018 17:44