正确的方法是扩展基列类,这将允许您覆盖单元格渲染,通过构造函数传入列配置,最重要的是设置 DataStoreName ,您应该在其中存储列的字段名称。最后,您不应该重用 onrangechanged 火,而是通过覆盖它直接访问 columnsort 处理程序。在范围更改和列排序处理程序应该调用某种类型的方法,您必须更新您的网格。我称我的 updateGrid 为理智。这允许您将异步请求使用的任何网格参数设置为特定的排序列和方向。您要使用列排序处理程序的主要原因是访问包含您的排序方向信息的 ColumnSort 事件
扩展基本 GWT 列的列类。您也可以扩展日期或数字列。
public GridStringColumn(String fieldName, String text, String tooltip, boolean defaultShown, boolean sortable, boolean hidden) {
super(new TextCell());
setDataStoreName(fieldName);
this.text_ = text;
this.tooltip_ = tooltip;
this.defaultShown_ = defaultShown;
setSortable(sortable);
this.hidden_ = hidden;
}
创建你的处理程序
dataGrid.addColumnSortHandler(new DataGridSortEvent());
你的排序事件类
protected class DataGridSortEvent implements ColumnSortEvent.Handler {
@Override
public void onColumnSort(ColumnSortEvent event) {
ColumnSortList sortList = dataGrid_.getColumnSortList();
if (sortList != null && sortList.size() > 0) {
Column<T, ?> sortColumn = (Column<T, ?>) sortList.get(0).getColumn();
LOG.info("col_sorta: " + event.isSortAscending());
LOG.info("col_index: " + sortColumn.getDataStoreName());
updateDataList();
}
}
}
updateDataList 是您用来向服务器端发出实际 AJAX 请求的方法。而不是记录您应该将此信息存储在数据网格类的私有成员中,以便您的请求可以参数化它们。
您也可以将其用于本地缓存,只需从本地服务器复制数据,然后返回该缓存集合的排序集合,而不是调用 updateDataList 方法。
现在您不需要为字符串名称存储单独的列表,如果列顺序因用户交互或其他原因发生变化,这会浪费内存,更不用说同步问题了。