テーブルを含むにDataGrid theDataGrid
バインドされた WPFがあります。DataSet ds
ユーザーが最初にグリッドで行を選択してからボタンを押すことで、ユーザーが行を削除できるようにしたいと考えています(データグリッドの外側に配置されています)。私は最終的に、私が望むことを行う次のコード行にたどり着きましたが、かなり醜いと思います。
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();
}
}
これを行うより良い方法はありますか?たとえば、ループを 1 つだけ必要とし、NewItemPlaceHolder
明示的にチェックする必要がないもの、または削除する行にアクセスするためのより効率的な方法はありますか?
theDataGrid.SelectedItems.Count
(ループが実行されるたびに変更されるため、最初のループで ds から何も削除してはならないことが既にわかりました...)