WPF数据网格删除选定项

本文关键字:删除 网格 数据 数据网 WPF | 更新日期: 2023-09-27 17:59:24

最近我一直在做一个项目,该项目以编程方式将数据导入WPF数据网格。

我几乎完成了这个项目,但我遗漏了一个删除选定单元格的按钮,这就是我的困境!

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

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

WPF数据网格删除选定项

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

这对我来说也很有效。

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

您在这里所做的错误是,在循环期间删除项目,这会扰乱循环计数,所以制作一个复制网格,从中删除selecteditem,然后用原始网格来等效它。。看看这个

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

这对我有用…

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

while循环使用SelectedItem而不是SelectedIndex

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

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

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

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