vacias - Eliminar la última fila Databound DataGridView C#
system invalidoperationexception la nueva fila sin confirmar no se puede eliminar (6)
Estoy usando VS 2008 / C # y vinculando una Lista local de clases de ayuda como el DataSource para un control DataGridView. Llamar al método Remove () en mi lista de clases de ayudante desencadena el evento CellFormatting de DataGridView, que tiene sentido (un poco).
Al eliminar lo que sea el DataBoundItem de la última fila de la grilla (siempre que la grilla tenga más de una fila), la colección Filas de DataGridView no se actualiza antes de que se desate este evento. Por lo tanto, en el controlador de eventos CellFormatting, obtengo una excepción IndexOutOfRangeException porque la colección Filas es demasiado grande.
Intenté eliminar la fila utilizando el método DataGridView.Rows.Remove () y el enlace utilizando un BindingSource en lugar de enlazar la Lista directamente como fuente de datos.
Encontré algunas referencias a esta ocurrencia a través de Google, pero las respuestas no aparecían o decían que usaban un método Delete () en la colección DataGridView o DataGridView.Rows, ninguna de las cuales existe actualmente.
La ordenación tampoco parece ser el problema, ya que realizar / no realizar una clasificación da como resultado el mismo resultado.
La única excepción a la "última fila" que es un problema de eliminación es si DataGridView contiene solo una fila, en cuyo caso todo funciona correctamente.
Tuve este problema en el pasado, y si recuerdo correctamente, hay una de dos cosas que puedes hacer. Cuando elimina el registro de la colección, establezca la propiedad de fuente de datos en su vista de tabla de datos en nulo, y luego vuelva a vincularla a su lista. Eso debería hacer el truco.
Alternativamente, puede manejar el evento DataError en su dataGridview y en el método puede decir e.Cancel = true para suprimir la excepción, o puede tratarlo allí.
Es un problema muy viejo, pero lo resolví manejando el evento row-remove, de la siguiente manera.
private void dgViewItems_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
{
dataAdapter.Update((DataTable)bindingSource1.DataSource);
}
Y funcionó.
Sé que esta es una vieja pregunta, pero encontré otra solución que funcionó para mí. Antes de eliminar el elemento de la fuente de datos / fuente de enlace, desentierre el controlador de eventos para el evento CellFormatting y luego vuelva a conectarlo. Por ejemplo:
RemoveHandler DataGridView1.CellFormatting, AddressOf DataGridView1_CellFormatting
Me.BindingSource1.Remove(item)
AddHandler DataGridView1.CellFormatting, AddressOf DataGridView1_CellFormatting
Tengo el mismo problema. He encontrado una solución. Intenta copiar todas las filas a la siguiente fila. luego remueva la primera fila de dgv. Un código de muestra para esto:
If Dgv.CurrentCell.RowIndex + 1 = Dgv.Rows.Count Then
For m = Dgv.Rows.Count - 2 To 0 Step -1
Dgv.Rows(m + 1).Cells(0).Value = Dgv.Rows(m).Cells(0).Value
Dgv.Rows(m + 1).Cells(1).Value = Dgv.Rows(m).Cells(1).Value
Dgv.Rows(m + 1).Cells(2).Value = Dgv.Rows(m).Cells(2).Value
Dgv.Rows(m + 1).Cells(3).Value = Dgv.Rows(m).Cells(3).Value
Next
Dgv.Rows.RemoveAt(0)
Exit Sub
End If
Dgv.Rows.Remove(Dgv.CurrentRow)
intentalo:)
Para ocultar la última fila, cambie la propiedad AllowUserToAddRows de la vista de tabla de datos como se muestra:
myDataGridView1.AllowUserToAddRows = false
Primero simplemente deshabilite la propiedad de Datagridview
como
dataGridView1.AllowUserToAddRows = false;
y luego simplemente elimine las últimas filas tantas filas como desee con for loop manteniendo -1.
dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1);
dataGridView1.Rows.RemoveAt(dataGridView1.Rows.Count - 1);