Ho un WPF DataGrid theDataGrid
associato a DataSet ds
contenente una tabella. Voglio consentire all'utente di rimuovere le righe selezionandole prima nella griglia e premendo un pulsante (posizionato al di fuori del datagrid). Ho finalmente arrivati alle seguenti righe di codice che faccio quello che voglio, ma che considero piuttosto brutto:Rimozione di righe da un datagrid WPF
DataSet ds = new DataSet();
...
// fill ds somehow
...
private void ButtonClickHandler(object Sender, RoutedEventArgs e)
{
List<DataRow> theRows = new List<DataRow>();
for (int i = 0; i < theDataGrid.SelectedItems.Count; ++i)
{
// o is only introduced to be able to inspect it during debugging
Object o = theDataGrid.SelectedItems[i];
if (o != CollectionView.NewItemPlaceholder)
{
DataRowView r = (DataRowView)o;
theRows.Add(r.Row);
}
}
foreach(DataRow r in theRows)
{
int k = ds.Tables["producer"].Rows.IndexOf(r);
// don't remove() but delete() cause of update later on
ds.Tables[0].Rows[k].Delete();
}
}
Esiste un modo migliore per fare questo? Per esempio. uno che ha bisogno di un solo ciclo e senza dover verificare esplicitamente lo NewItemPlaceHolder
o un modo più efficiente per accedere alle righe che devono essere cancellate?
(ho già capito che non devo togliere nulla dal DS nel primo ciclo, da allora theDataGrid.SelectedItems.Count
modifiche ogni volta che il ciclo viene eseguito ...)
ho una soluzione vuoi che la aggiungo ?? – gasroot