c# winforms datagridview refresh populate

C#- ¿Cómo actualizo DataGridView después de eliminar filas?



winforms refresh (7)

En mi código, necesito eliminar filas de DataGridView después de un intervalo recurrente, por lo que llamo a la siguiente función cuando expira un temporizador:

private void removeRows(DataGridView dgv) { foreach (DataGridViewRow row in dgv.Rows) { // if some condition holds dgv.Remove(row); } dgv.Refresh(); }

Sé que las filas se eliminaron correctamente de DataGridView, aunque todavía permanecen en la pantalla por el motivo que sea. ¿Algún consejo sobre lo que podría estar haciendo mal?


¿No necesita volver a enlazar la cuadrícula de datos?

dgrv.Datasource = [whatever data source]; dgrv.DataBind();

?


A veces, refrescar la vista de cuadrícula de datos no es suficiente y su padre que lo contiene también debe actualizarse.

Prueba esto:

dgv.Refresh(); // Make sure this comes first dgv.Parent.Refresh(); // Make sure this comes second

También puede editar su fuente y adjuntar la nueva fuente de datos al control.


Intente eliminar los elementos reales de su fuente de enlace en su lugar.


Si ha vinculado su cuadrícula de datos a una colección observable (si no, entonces debería), deberá implementar la interfaz INotifyCollectionChanged para que los oyentes reciban notificaciones de los cambios dinámicos, como cuando los elementos se agregan y eliminan o se actualiza toda la lista.

HTH


Si lo entiendo correctamente, quiere eliminar las filas seleccionadas por un usuario de su DGV.

  1. Use DataGridViewRowCollection de su DGV en lugar de DataRowCollection de DataTable. DataGridViewRow tiene la propiedad Selected que indica si se selecciona una fila o no.

  2. Una vez que haya determinado que se va a eliminar una fila, puede usar el método Remove de DataGridViewRowCollection para eliminar el elemento de la cuadrícula, por ejemplo, YerDataGridView.Rows.Remove (fila)

  3. Tenga en cuenta que en este punto, aunque el elemento se eliminó de la DGV, aún no se ha eliminado de Access DB. Debe llamar al método de Actualización de TableAdapter en su DataSet / DataTable para confirmar las eliminaciones en la base de datos, por ejemplo, YerTableAdapter.Update (YerDataSet)

Normalmente llamaría a Update una vez para confirmar los cambios solo después de haber eliminado todos los elementos que se eliminarán de la DGV.


Si se trata de una cuadrícula ligada a datos, debería estar trabajando en la propia fuente de enlace en lugar de la cuadrícula.


dataGridView.DataSource = null; dataGridView.Update(); dataGridView.Refresh(); dataGridView.DataSource = SomeDataSource;

Espero esto hepls.