我有一个GWT CellTable,其可排序列非常类似于开发人员的指南示例(http://code.google.com/webtoolkit/doc/latest/DevGuideUiCellTable.html#columnSorting)。
但是,我希望某些列按降序排序,而不是默认升序。也就是说,如果列A当前没有排序并且我点击它的标题,我希望列A在第一次单击时降序排序,在第二次单击时升序。但我仍然希望其他列按照目前的方式排序 - 在第一次点击时使用升序。
除了用于设置可排序性的Column.setSortable(boolean)方法和用于手动触发排序的ColumnSortList.push(ColumnSortInfo)方法之外,似乎没有太多控制过程。
有没有办法实现这个目标?
答案 0 :(得分:7)
Column.setDefaultSortAscending(false)
是这样做的简单方法;无需自定义CellTable
。
答案 1 :(得分:5)
我能够通过覆盖与表关联的CellTable
的{{1}}方法,扩展onColumnSort(ColumnSortEvent)
以完全按照我的意愿行事。这是实施的肉/土豆。我不得不在封面下进行一些维护,以便在您要再次对其进行排序时跟踪列是否已经排序。
让我感到困惑的一件事(在谷歌的例子中并不清楚)是使用ListHandler
方法实际上并没有像点击那样触发排序,而只是改变了列认为它已经排序。
当我准备好使用我制作的这张桌子时,我基本上做了以下事情:
ColumnSortList.push()
以下是SortedCellTable<MyRowObject> table = new SortedCellTable<MyRowObject>();
table.addColumn(colOne, "one", true); // sortable column
table.addColumn(colTwo, "two", true); //sortable column
table.addColumn(colThree, "three", false); // unsortable column
table.setDefaultSortOrder(colOne, true); // sorts ascending on first click
table.setDefaultSortOrder(colTwo, false); // sorts descending on first click
table.setInitialSortColumn(colTwo); // sort this column as soon as data is set
table.setComparator(colOne, colOneComp); // use this comparator when sorting colOne
table.setComparator(colTwo, colTwoComp); // use this comparator when sorting colTwo
panel.add(table); // add the table to our view
// ...sometime later, asynchronously...
table.setList(myRowObjectList);
实施:
SortedCellTable
答案 2 :(得分:2)
看看GWT CellTable columnsorting。 (有人投了票,因为他/她不同意我的做法?)
这不是你的问题的答案,但它主张你在尝试小册表例子所说明的任何事情之前,先了解Celltable的基础知识。
通过了解Cell / Grid表的基本行为和要求,列的排序将清楚地表现出来。
通过提供比较器的实现来执行排序。就我而言,我尝试了一些实现比较器的方法,以适应我希望列分类的各种方式。
答案 3 :(得分:1)
而不是
someTable.getColumnSortList().push(provider.getDefaultSortColumn());
使用
someTable.getColumnSortList().push(new ColumnSortInfo(provider.getDefaultSortColumn(), false));