WPF DataGrid删除SelectedItems

时间:2011-06-18 18:30:35

标签: c# wpf datagrid selecteditem

最近我一直在研究一个将数据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个项目。我添加了一个删除所有选项,但这也是必要的。

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

9 个答案:

答案 0 :(得分:5)

删除所选项目即可更改SelectedItems集合。您应该先复制它然后开始删除。

答案 1 :(得分:3)

这对我来说也很有效。

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

答案 2 :(得分:0)

你在这里做的错误是你在循环中删除项目,因为它正在弄乱循环计数,所以制作一个复制网格并从中移除选定项目,然后通过原始网格进行计算。  看看这个

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;

答案 3 :(得分:0)

这对我有用......

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

答案 4 :(得分:0)

这对我有用......

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

答案 5 :(得分:0)

使用 SelectedItem 而不是 SelectedIndex

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

答案 6 :(得分:0)

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

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

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

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

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

答案 7 :(得分:0)

Do While dgData.SelectedItems.Count > 0
 dgData.SelectedItem.Row.Delete()
Loop

答案 8 :(得分:0)

我的解决方案(如果您使用带有 autogeneratecolumns=true 的 adonet);

for (int i = dgv.SelectedItems.Count-1; i >= 0; i--)
{
     DataRowView dataRow = (DataRowView)dgv.SelectedItems[i];
     dataRow.Delete();
}