WPF DataGrid 删除所选项目

问题描述 投票:0回答:9

最近我一直在开发一个项目,该项目以编程方式将数据导入到 WPF DataGrid 中。

我几乎完成了该项目,但我遗漏的是一个用于删除所选单元格的按钮,这就是我陷入困境的地方!

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

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 个项目。我添加了删除所有选项,但这也是必要的。

如果有人给我解决方案,我将不胜感激。

c# wpf datagrid selecteditem
9个回答
6
投票

通过删除所选项目,您将更改

SelectedItems
集合。您应该先复制它,然后开始删除。


4
投票

这对我来说也很有效。

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

1
投票

您在这里犯的错误是在循环期间删除项目,这会扰乱循环计数,因此制作一个复制网格并从中删除所选项目,然后将其与原始网格相等。 看看这个

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;

0
投票

这对我有用......

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

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);
}

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 会增加。


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

0
投票

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

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

0
投票

这对我有用......

if (DataGrid1.SelectedItem != null) 
{
  DataRowView(DataGrid1.SelectedItem).Row.Delete();
}
© www.soinside.com 2019 - 2024. All rights reserved.