2010-08-03 247 views
1

我正在使用DataGrid來顯示對象集合的特定屬性的值。我已經通過類似於Tomer Shamam's blog的方法實現了搜索和單元格高亮顯示。WPF:DataGrid查找和替換

但是,我現在需要執行'查找/替換'類型的功能。我推測我將能夠遍歷DataGrid的單元格來執行突出顯示和替換,但似乎沒有一種簡單的方法來執行此操作。

任何想法?

回答

1

我想你也許有一個錯誤的觀念在這種情況下,也許你是從的WinForms到WPF世界來了...

在WPF DataGrid中,你基本上就無法再經由DataGrid中操縱數據,你總是在工作數據源直接。至於「似乎沒有一個簡單的方法來做到這一點」 - 你是對的。這將比它應該更困難。

如果我是執行一個查找/替換功能 - 每一次點擊將首先突出顯示下一個occurence然後我可以選擇跳過/ find_next或更換 - 那麼這是我會怎麼做:

1)我們需要知道我們當前的位置 - DataGrid.CurrentItem給出當前(數據源)對象;
2)現在我們對數據源執行搜索,以查找從當前對象位置開始的下一次出現(例如,var indx = List<object>.FindIndex(...),然後是var nextItem = List<object>[indx]); 3)然後,我們需要滾動DataGrid到找到的對象,並將DataGridRow放入視圖中 - 您可能需要在調用之前執行DataGrid.UpdateLayout(),看起來有一些與.NET 4構建的怪癖在我的經驗數據網格);
4)你應該已經知道如何突出一個單元格......;
5)等待用戶輸入,跳過或替換;
6)如果我們替換,我們可以使用DataGrid.CurrentItemnextItem變量,並用新值替換某個值。根據您設置DataGrid的方式,您可能需要執行一些Refresh()/ UpdateLayout()調用或BindingOperations.GetBindingExpression(...).UpdateTarget()調用來更新DataGrid;
7)最後回到步驟1並重復;

+0

很晚了,但只是對其他人感興趣,這可能會有所幫助(特別是在與DataGrid相關的文章的底部的一個問題) - http://www.codeproject.com/Articles/889607/A-Rich-Find - 和 - 替換 - 控制 - 對 - 幾乎全WPF – 2015-04-02 03:08:26