2011-04-01 47 views
0

在我們的WinForm應用程序之一中,我們使用了啓用了列排序和SortDescriptions的DataGridView。DataGridVeiw(WinForm) - 確定何時對行進行了重新排序

如果用戶修改其中一個正在排序的單元格,則應用排序,並且網格按新順序繪製行。

我需要訪問DataGridRows之前,他們被繪,但他們已被排序後。我知道我可以使用DataGridView.RowPrePaint(),但這似乎是矯枉過正。當鼠標懸停在某些單元格上時,它會觸發。我只需要在排序發生變化時進入行。我想也許我可以處理DGV上的「Sorted」事件,但只有在用戶單擊某個列標題後纔會觸發,但當DGV應用任何現有的列排序或SortDescriptions時,我需要到達行。基本上,行可以重新排序(自動排序)後,其中一個單元格編輯DGV排序或行後,通過RowEdit「模板」變性。

我今天在google上搜索了很多,並沒有提出任何建議。

有什麼建議嗎? (除了處理DataGridView.RowPrePaint事件....)

回答

0

我找到了答案。這是我面對(從MSDN)確切的問題:

當含有兩個結合的和未結合的列 排序DataGridView控件,在未結合列中的值不能被自動保持 。要保持這些值,您必須通過將VirtualMode屬性設置爲true並處理CellValueNeeded和CellValuePushed事件來實現虛擬 模式。

有關詳細信息,請參閱如何:在Windows中實現虛擬模式 表單DataGridView控件。另外,不支持以綁定模式排列未綁定列 。

希望這會有所幫助。

真誠,林達劉

0

我不確定它是否有效,但如果我是你,我會保留RowPrePaint()事件。

設置一個標誌

bool RowSorted; 

設置RowSorted變量排序功能真實,再次觸發了RowPrePaint事件中的行進行排序後排序功能。

在RowPrePaint函數中,我會檢查標誌。如果爲true,則繪製行;如果爲false e.Handled = true;

+0

這就是問題。 「排序」事件不會在發生「自動排序」時觸發(我在文章中說「排序」,但我的意思是「排序」,只有當用戶第一次點擊列標題時纔會觸發。在行被採用之後觸發(由於列更改或新行被插入),但在繪製Grid之前。 – Shayne 2011-04-03 18:45:05

相關問題