我有一個WPF DataGrid theDataGrid
綁定到包含表的DataSet ds
。我想讓用戶首先在網格中選擇它們,然後按下一個按鈕(定位在數據網格之外的某處)來刪除線條。我終於來到了下面的代碼線,做我想做的,但我認爲比較難看:刪除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();
}
}
有沒有更好的方式來做到這一點?例如。一個只需要一個循環,而不必顯式地檢查NewItemPlaceHolder
,或者可能有一種更有效的方式來訪問要刪除的行?
(我已經想通了,我不能刪除從第一循環的DS東西,從此theDataGrid.SelectedItems.Count
改變每次執行循環...)
我有一個解決方案,你想我添加它? – gasroot