我有一个DataGrid
绑定到ObservableCollection
DataRowView
。
当我执行任何操作(如插入/删除/复制/粘贴/撤消/重做)时,我会操纵底层的DataSource。
Ex:当我必须将数据粘贴到一组单元格中时,我得到它们的行和列索引(上下文菜单指向的单元格)并编辑DataSource。我存储他们以前的值及其索引,以便在我执行“撤消”操作时还原。
当我过滤网格时,视图会在DataSource保持不变的情况下发生变化。因此,当我执行粘贴操作时,我得到的索引与DataSource中的索引不匹配。我最终粘贴在错误的细胞中。
如何操作DataSource,即在应用过滤器后获取实际索引/数据以执行所有操作?
答案 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);