WPF:DataGrid查找和替换

时间:2010-08-03 23:00:30

标签: c# wpf wpfdatagrid replace

我正在使用 DataGrid 来显示对象集合的特定属性的值。我通过与Tomer Shamam's blog上的方法类似的方法实现了搜索和单元格突出显示。

但是,我现在需要实现“查找/替换”类型功能。我假设我能够遍历DataGrid的单元格来执行突出显示和替换,但似乎没有一种简单的方法可以做到这一点。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为你可能在这种情况下有错误的心态,也许你是从WinForms到WPF世界......

在WPF DataGrid中,您基本上不会通过DataGrid操作数据,您总是直接使用DataSource。至于"似乎并不是一个简单的方法来做到这一点" - 你是对的。它会比它应该更加困难。

如果我要实现查找/替换功能 - 每次单击都会首先突出显示下一次出现,然后我可以选择跳过/ find_next或替换 - 那么我就是这样做的:

1)我们需要知道当前位置 - DataGrid.CurrentItem给出当前(数据源)对象;
2)现在我们对数据源执行搜索,以从当前对象位置开始查找下一个出现的位置(例如var indx = List<object>.FindIndex(...)后跟var nextItem = List<object>[indx]);
3)然后我们需要将DataGrid滚动到找到的对象并将DataGridRow带入视图 - DataGrid.ScrollIntoView(nextItem);(您可能需要在调用之前执行DataGrid.UpdateLayout(),似乎有一些与.NET的怪癖4我内置的DataGrid经验);
4)你应该已经知道如何突出显示一个单元格......; 5)等待用户输入,跳过或替换;
6)如果我们替换那么我们可以使用 DataGrid.CurrentItem nextItem 变量并用新值替换一些值。根据您设置DataGrid的方式,您可能需要执行一些Refresh()/ UpdateLayout()调用或BindingOperations.GetBindingExpression(...)。UpdateTarget()调用以更新DataGrid;
7)最后回到步骤1并重复;