用于排序的GWT DataGrid标题单击事件

时间:2014-01-21 12:04:32

标签: gwt

我想知道用户是否点击了升序或降序排序的标题。 我怎么能找到它?

此致

2 个答案:

答案 0 :(得分:1)

试试这个:

1)创建SortHandler并附加到您的网格

ColumnSortEvent.AsyncHandler sortHandler= new ColumnSortEvent.AsyncHandler(grid);
grid.addColumnSortHandler(sortHandler);
ColumnSortList columnSortList = grid.getColumnSortList();

2)创建你的专栏(TextColumn等),例如:

TextColumn<Dog> yourTextColumn = new TextColumn<Dog>() {
    @Override
    public String getValue(String object) {
       return object;  
    }
}

3)创建你的标题

Header yourHeader = new Header() {
   @Override
   public Object getValue() {
       return value; // here return header value
   }
}

3)将列添加到网格并将ColumnSortInfo推送到列表

grid.addColumn(yourTextColumn, yourHeader);
columnSortList.push(new ColumnSortList.ColumnSortInfo(yourColumn, true));

您可以随时查看here以获取更多有用的示例。

答案 1 :(得分:1)

为了获得排序的方向,您所要做的就是获取ColumnSortList并使用零索引调用方法#get(0)。作为ColumnSortList的文档说“第0项是最近排序的*列的{@link ColumnSortInfo}。”。所以返回的对象(ColumnSortList.ColumnSortInfo)包含有关最后一次单击的列的信息,它有一个名为#isAscending()的方法,它是一个标识方向的标志。

示例代码:

ColumnSortList sortList = dataGrid.getColumnSortList();
ColumnSortList.ColumnSortInfo info = sortList.get(0);

还要注意,此代码块应位于AsyncDataProvider#onRangeChanged中。

还有另一种选择,请考虑以下因素:

            columnSortHandler = new ColumnSortEvent.AsyncHandler(table) {
            @Override
            public void onColumnSort(ColumnSortEvent event) {
                List<T> newData = new ArrayList(table.getVisibleItems());
                if (event.isSortAscending()) {
                    Collections.sort(newData, (Comparator)event.getColumn());
                } else {
                    Collections.sort(newData, (Comparator)event.getColumn());
                    Collections.reverse(newData);
                }
                table.setRowData(newData);
            }
        };
        table.addColumnSortHandler(columnSortHandler);