我想知道用户是单击标题上升还是下降排序。我怎么能找到它?
问候
尝试以下:
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)将列添加到网格中,然后将列Sortinfo推入列表
grid.addColumn(yourTextColumn, yourHeader);
columnSortList.push(new ColumnSortList.ColumnSortInfo(yourColumn, true));
您随时可以在这里寻找更多有用的示例。
为了获得订购的方向,您要做的就是获取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);