2014-02-19 42 views
2

我正在使用GWT 2.5.1。我有一個CellTable,我希望能夠通過多個列進行排序。基本上,我希望能夠進行組合排序。例如,我有4列。 ColA,ColB,ColC,ColD。當我點擊ColA時,它應該按該列進行排序。現在,按下shift鍵,如果我點擊ColB,ColA應該保留爲主要列,ColB應該成爲次要列。再次,如果點擊按住Shift鍵的Col D,則應先按ColA排序,然後按ColB排序,然後按ColD排序。我爲每一列寫了比較器。所以基本上,單列分類工作沒有任何問題。GWT中的多列排序CellTable

我試圖用可樂做

myTable.getColumnSortList().push(ColD); 
myTable.getColumnSortList().push(ColB); 
myTable.getColumnSortList().push(ColA); 
ColumnSortEvent.fire(usersTable, usersTable.getColumnSortList()); 

但這只是排序。

有沒有人試圖做類似的事情?任何指針將非常感激。

編輯:

讓我簡化我的要求。可以說我有一個按鈕。點擊按鈕時,我想先按ColA排序列表,然後按ColB排序,然後按ColD排序。 ColB和ColD成爲次要分類欄。據我所知,myTable.getColumnSortList()只維護標題狀態,即表中所有列(每次只有一個,不同時)以及順序爲asc或desc排序的信息。即使我們做ColumnSortEvent.fire(usersTable,usersTable.getColumnSortList());它將只按列表中最新添加的列(單列排序)對列進行排序,並按該列的ColumnSortInfo對象確定的順序進行排序。

我的想法是實現多列排序像在下面的示例所示:http://www.datatables.net/examples/basic_init/multi_col_sort.html

+0

我使用類似的代碼,它工作正常。你什麼時候開始排序事件? –

+0

請參閱下面的說明。 – user3228621

+0

該文檔明確指出:「ColumnSortList包含排序列的有序列表。」 - 列表,而不是單個列。 –

回答

0

我有同樣的問題。雖然我對我的解決方案不滿意,但我想我會分享它,以防萬一任何人遇到同樣的問題。在我看來,火災事件只是推動最後一列。通過在每次推動後調用它,您將獲得所需的結果。拉姆,我知道,但最好沒有。


myTable.getColumnSortList().push(ColD); 
ColumnSortEvent.fire(usersTable, usersTable.getColumnSortList()); 
myTable.getColumnSortList().push(ColB); 
ColumnSortEvent.fire(usersTable, usersTable.getColumnSortList()); 
myTable.getColumnSortList().push(ColA); 
ColumnSortEvent.fire(usersTable, usersTable.getColumnSortList()); 
0

ColumnSortEvent.ListHandler.onColumnSort()僅排序的一列;最近被推送到SortColumnList。查看由onColumnSort()調用的ColumnSortEvent.getColumn(),僅返回sortList的索引0。

我認爲GWT在這方面被打破。 ColumnSortEvent是使用SortColumnLIST(強調我的)創建的,但是隻有列表的第一列很重要。

正如另一個答案指出的那樣,修復方法是按照與列優先級相反的順序進行多次排序:在主要列之前對次列進行排序。