【发布时间】:2012-12-11 11:50:59
【问题描述】:
我有一个 WPF DataGrid theDataGrid 绑定到包含一个表的 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();
}
}
有没有更好的方法来做到这一点?例如。一种只需要一个循环而无需显式检查NewItemPlaceHolder 的方法,还是一种更有效的方法来访问要删除的行?
(我已经知道我不能在第一个循环中从 ds 中删除任何内容,因为每次执行循环时theDataGrid.SelectedItems.Count 都会更改...)
【问题讨论】:
-
我有一个解决方案你想要我添加它吗??
标签: c# wpf data-binding datagrid