2009-10-13 29 views
5

En mi código que necesito para eliminar filas de la DataGridView después de un intervalo recurrente, por lo que llamo la siguiente función cuando un temporizador expira:C# - ¿Cómo refrescar DataGridView después de la eliminación de filas

private void removeRows(DataGridView dgv) { 

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

} 

que sé las filas se eliminan 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?

Respuesta

2

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

HTH

+0

lo siento, no estoy familiarizado con eso (C# newbie). ¿Podrías expandir un poco? Gracias. – sa125

+0

Hola, si editas tu publicación y añades información sobre cómo estás rellenando tu fuente de datos, entonces puedo ayudarte con algunos consejos. Aclamaciones. –

3

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

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

?

+1

DataGridView es un control de winforms, por lo tanto, no se necesita databind. Si fuera ASP .NET, en su ejemplo, eliminar filas no afecta a la fuente de datos. Por lo tanto, al hacer esto, la vista de cuadrícula mostrará los mismos datos antes de eliminarlos. –

1

Si se trata de una cuadrícula de datos encuadernados, debe trabajar en el origen de enlace en lugar de la cuadrícula.

1

refrescante veces el gridview datos no es suficiente y su matriz que contiene debe ser renovada también.

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.

0

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

2

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

  1. Uso del DataGridViewRowCollection de la DG V en lugar de DataRowCollection de la 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, p. YerDataGridView.Rows.Remove (fila)

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

que normalmente llamaría actualización de una vez para confirmar los cambios sólo después de haber eliminado todos los elementos para ser eliminados de la DGV.

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

Hope this hepls.

Cuestiones relacionadas