WPF DataGrid删除选定项

dw1jzc5e  于 2023-10-22  发布在  其他
关注(0)|答案(9)|浏览(213)

最近,我一直在做一个项目,它将数据以编程方式导入到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个项目。我已经添加了一个删除所有选项,但这也是必要的。
如果有人能给我答案,我将不胜感激。

mpgws1up

mpgws1up1#

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

a8jjtwal

a8jjtwal2#

这对我也很有效。

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

xvw2m8pv3#

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

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;
mlmc2os5

mlmc2os54#

这对我很有效…

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

w6lpcovy5#

使用SelectedItem而不是SelectedIndex的while循环

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

vnjpjtjt6#

我也有和作家一样的问题。找到了一个很好的(我认为)解决方案。
所以主要的问题是SelectedItems是动态的,当你删除一行的时候,它又会重新计算。
所以我的代码看起来像这样:

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

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

z6psavjg

z6psavjg7#

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

jgwigjjp8#

我的解决方案(如果你使用的是adonet,autogeneratepolums =true);

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

cu6pst1q9#

这对我很有效…

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

相关问题