2011-06-18 156 views
3

最近我一直在处理一个项目,它将数据编程导入到WPF DataGrid中。WPF DataGrid删除SelectedItems

我几乎完成了这个项目,但我遗漏的东西是一个按钮来删除选定的单元格,这就是我卡住的地方!在仅移除项目中选择,就像CURRENTITEM但它并不比2个选择的项目再也去除

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

正常工作:

使用我的DataGrid的基本知识,写了这个代码!

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

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

回答

5

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

+0

非常感谢帮助! –

-1

你在这里做什么要删除whaich与循环搞乱循环过程中计数的项目,以便进行复制网格,从中取出将selectedItem然后由一部开拓创新的一个equlize它的错误.. 检查了这一点

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

Tnx!我将SelectedItem对象复制到一个新对象中并添加到循环中。 –

+2

这不做任何事情,因为'grid'和'mygrid'是相同的'DataGrid'。 –

-1

这个工作对我来说...

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

如果您对DataGrid进行了排序,则他不起作用,因为索引与基础项目源不同。另外,它会是dataGrid1_item_source.RemoveAt(dataGrid1.SelectedIndex);行不在ObservableCollection中。 – Doug

0

这个工作对我来说...

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

A,而使用的SelectedItem代替的SelectedIndex

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

环路这也运作良好,对我来说。

while (dataGrid1.SelectedItems.Count > 0){ 
    dataGrid1_item_source.Rows.RemoveAt(dataGrid1.SelectedIndex); 
} 
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增加。