WPF DataGrid删除SelectedItems

最近我一直在研究一个将数据programmicaly导入WPF DataGrid的项目。

我差不多完成了这个项目,但是我遗漏的东西是一个删除选定单元格的按钮,这就是我被困住的地方!

我使用DataGrids的基本知识编写了这段代码:

var grid = dataGrid1; if (grid.SelectedIndex >= 0) { for (int i = 0; i <= grid.SelectedItems.Count; i++) { grid.Items.Remove(grid.SelectedItems[i]); }; } 

只删除像CurrentItem一样选择的项目,但它不会删除超过2个选定的项目!

我拥有的DataGrid至少应包含至少100个项目。 我添加了一个删除所有选项,但这也是必要的。

如果有人给我解决方案,我会感激不尽。

通过删除所选项目,您正在更改SelectedItems集合。 您应该先复制它然后开始删除。

这对我也很有用。

 while (dataGrid1.SelectedItems.Count > 0){ dataGrid1_item_source.Rows.RemoveAt(dataGrid1.SelectedIndex); } 

这对我有用……

 if (DataGrid1.SelectedItem != null) { ((DataRowView)(DataGrid1.SelectedItem)).Row.Delete(); } 

使用SelectedItem而不是SelectedIndex的 while循环

 while (dataGrid1.SelectedItems.Count > 0){ if (dataGrid1.SelectedItem == CollectionView.NewItemPlaceholder) dataGrid1.SelectedItems.Remove(grid.SelectedItem); else dataGrid1.Items.Remove(dataGrid1.SelectedItem); } 

我有一个与作者相同的问题。 并发现相当漂亮(我认为)的解决方案。

所以主要的问题是SelectedItems动态,当你删除一行时,它会再次重新计算。

所以我的代码看起来像这样:

 for (int i = -datagrid1.SelectedItems.Count; i < datagrid1.SelectedItems.Count; i++) { datagrid1.SelectedItems.RemoveAt(datagrid1.SelectedIndex); } 

因此,每次for循环执行步骤1时,datagrid1.SelectedItems.Count减1,变量i增加。

你在这里做的错误就是你在循环中删除项目,因为它会弄乱循环计数,所以制作一个复制网格并从中删除selecteditem然后通过orignal来实现它。检查出来

 var grid = dataGrid1; var mygrid = dataGrid1 if (grid.SelectedIndex >= 0) { for (int i = 0; i <= grid.SelectedItems.Count; i++) { mygrid .Items.Remove(grid.SelectedItems[i]); }; } grid = mygrid; 

这对我有用……

 while (dataGrid1.SelectedItems.Count > 0){ dataGrid1_item_source.Rows.RemoveAt(dataGrid1.SelectedIndex); }