GWT CellTable中的多列排序

时间:2014-02-19 16:57:48

标签: java gwt

我正在使用GWT 2.5.1。我有一个CellTable,我希望能够按多列排序。基本上,我希望能够进行组合排序。例如,我有4列。 ColA,ColB,ColC,ColD。当我点击ColA时,它应按该列排序。现在,按下shift键,如果我单击ColB,ColA应保留为主列,ColB应成为辅助列。再次,如果我点击按下Shift键的Col D,那么首先应该是ColA,然后是ColB,然后是ColD。我为每一栏写了比较器。所以基本上,单列排序工作没有任何问题。

我试着做

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

但这仅归ColA所有。

有没有人试图做类似的事情?任何指针都会非常感激。

编辑:

让我简化我的要求。可以说我有一个按钮。单击按钮时,我想先按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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

ColumnSortEvent.ListHandler.onColumnSort()仅对一列进行排序;最近推送到SortColumnList。看到由onColumnSort()调用的ColumnSortEvent.getColumn()只返回sortList的索引0。

我认为GWT在这方面已被打破。 ColumnSortEvent是使用SortColumnLIST(强调我的)创建的,但只有列表的第一列才重要。

正如另一个答案所指出的,修复是按列优先顺序的相反顺序多次排序:在主要数据之前对辅助列进行排序。