Надлежащим способом является расширение базового класса столбца, который позволит вам переопределить рендеринг ячейки, передать конфигурацию столбца через конструктор и, что наиболее важно, установить DataStoreName, в котором вы должны хранить имя поля для столбца. И, наконец, вы не должны повторно использовать переставленный огонь, а обращаться к обработчику 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.
Теперь вам не нужно хранить отдельный список только для имен строк, что является пустой тратой памяти, не говоря уже о проблеме синхронности, если порядок столбцов изменяется в результате взаимодействия с пользователем или чего-либо другого.