2009-10-13 18 views
5

Nel mio codice ho bisogno di rimuovere le righe dal DataGridView dopo un intervallo ricorrente, e così io chiamo il seguente funzione quando un timer scade:C# - come faccio rinfresco DataGridView dopo aver rimosso le righe

private void removeRows(DataGridView dgv) { 

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

} 

lo so le righe vengono cancellate con successo da DataGridView, anche se rimangono comunque sul display per qualsiasi motivo. Qualche consiglio su cosa potrei fare male?

risposta

2

Se si è associato il proprio datagrid a una raccolta osservabile (se non è necessario), sarà necessario implementare l'interfaccia INotifyCollectionChanged in modo che agli ascoltatori vengano notificati cambiamenti dinamici, ad esempio quando gli elementi vengono aggiunti e rimossi o l'intero elenco è rinfrescato.

HTH

+0

scusa, non ho familiarità con quello (C# newbie). Potresti espanderti un po '? Grazie. – sa125

+0

Ciao, se modifichi il tuo post e aggiungi alcune informazioni su come stai compilando la tua origine dati, allora potrei essere in grado di aiutarti con alcuni suggerimenti. Saluti. –

3

Non è necessario riassociare la griglia di dati?

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

?

+1

DataGridView è un controllo winforms, pertanto il database non è necessario. Se fosse ASP .NET, nel suo esempio la rimozione delle righe non influisce sull'origine dati. Pertanto, facendo ciò, la griglia mostrerà gli stessi dati prima di rimuoverli. –

1

Se si tratta di una griglia con associazione a dati, è necessario lavorare sull'origine di associazione stessa anziché sulla griglia.

1

A volte aggiornare la gridview di dati non è sufficiente e la controllante contenente deve essere aggiornato troppo.

Prova questo:

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

Si potrebbe anche modificare la vostra fonte e collegare la nuova origine dati al controllo.

0

Provare a rimuovere gli elementi effettivi dall'origine di associazione.

2

Se ho capito bene, si desidera eliminare le righe selezionate da un utente dal DGV.

  1. Utilizzare il DataGridViewRowCollection del DGV, piuttosto che DataRowCollection della DataTable. DataGridViewRow ha la proprietà Selected che indica se una riga è selezionata o meno.

  2. Una volta stabilito che una riga deve essere eliminata, è possibile utilizzare il metodo Remove di DataGridViewRowCollection per eliminare l'elemento dalla griglia, ad es. YerDataGridView.Rows.Remove (riga)

  3. Si noti che a questo punto, sebbene l'elemento viene rimosso dal DGV, non è stato ancora eliminato dal DB di accesso. È necessario chiamare il metodo di aggiornamento TableAdapter sul DataSet/DataTable per eseguire il commit delle eliminazioni nel DB, ad es. YerTableAdapter.Update (YerDataSet)

che normalmente sarebbe chiamare aggiornamento una volta per confermare le modifiche solo dopo aver rimosso tutti gli elementi da eliminare dal DGV.

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

Spero che questo hepls.

Problemi correlati