在WPF中过滤后编辑DataGrid

时间:2015-09-24 10:47:26

标签: c# wpf datagrid

我有一个DataGrid绑定到ObservableCollection DataRowView

当我执行任何操作(如插入/删除/复制/粘贴/撤消/重做)时,我会操纵底层的DataSource。

Ex:当我必须将数据粘贴到一组单元格中时,我得到它们的行和列索引(上下文菜单指向的单元格)并编辑DataSource。我存储他们以前的值及其索引,以便在我执行“撤消”操作时还原。

当我过滤网格时,视图会在DataSource保持不变的情况下发生变化。因此,当我执行粘贴操作时,我得到的索引与DataSource中的索引不匹配。我最终粘贴在错误的细胞中。

如何操作DataSource,即在应用过滤器后获取实际索引/数据以执行所有操作?

1 个答案:

答案 0 :(得分:1)

根据我在阅读你的问题后理解的内容。在Item1之后出现的新记录也应该在源集合中的Item1之后。这种情况现在没有发生,因为指数不同,当然会有所不同。 由于您尚未发布代码,因此我在下面发布了示例代码:

// new employee to add
            Employee empNew = new Employee() { Name = "New1", Address = "NewAdd1" };

// get corresponding item  in filtered view after which you want to insert
            Employee emp = (Employee)DgrdEmployees.SelectedItem;

// get true collection which is datasource
            ObservableCollection<Employee> sourceCol = (ObservableCollection<Employee>)(CollectionViewSource.GetDefaultView(DgrdEmployees.ItemsSource).SourceCollection);

// find index of selected item after which we are inserting/pasting
            int trueIndex = sourceCol.IndexOf(emp);

// insert it at exact location in true unfiltered source collection
            sourceCol.Insert(trueIndex + 1, empNew);