Gwt celltable вызывает сортировку по столбцу - PullRequest
16 голосов
/ 18 ноября 2011

У меня есть планшет Gwt.Нажатие на заголовки сортирует столбцы правильно.Но при загрузке страницы столбцы не сортируются по умолчанию.Я хочу сделать самый правильный столбец для сортировки при загрузке страницы.

Ответы [ 3 ]

27 голосов
/ 10 августа 2012

Чтобы прояснить пару существующих ответов ... список сортировки cellTable (к которому обращается функция getColumnSortList()) определяет только состояние заголовка таблицы, но фактически не сортирует любые данные.

Как и предполагалось @ z00bs, возможно, будет целесообразно отсортировать данные внешне, если это возможно. Если вы знаете, что данные будут предварительно отсортированы, то вам следует использовать функции getColumnSortList().clear() и getColumnSortList().push(), чтобы сообщить своим пользователям, как сортируются данные.

Если, однако, вы хотите, чтобы CellTable действительно сортировал данные, вам потребуется запустить событие, чтобы заставить CellTable фактически отсортировать составляющие данные на стороне клиента. Для этого вы можете использовать метод состояния ColumnSortEvent.fire(), например:

ColumnSortEvent.fire(myTable, myTable.getColumnSortList());

Это вызовет событие, которое обрабатывает сортировку данных на основе текущего состояния заголовка. Таким образом, вы можете сначала установить желаемое начальное состояние сортировки заголовка, а затем выполнить эту строку, чтобы фактическое упорядочение данных отражало текущее состояние сортировки, представленное в заголовке.

11 голосов
/ 23 января 2012

Вы можете использовать getColumnSortList () и выдвинуть столбец, по которому вы хотите отсортировать, следующим образом:

dataGrid.getColumnSortList().push(columnToSortBy);

Таблица будет отсортирована по указанному столбцу в порядке возрастания.

Вызов этого метода дважды вызовет проверку для проверки, если данный столбец уже помещен в список, и если это так, он будет отсортирован в порядке убывания, чтобы таблица сортировалась по столбцу в порядке убывания.порядок использования:

dataGrid.getColumnSortList().push(columnToSortBy);
dataGrid.getColumnSortList().push(columnToSortBy);

За сценой, столбец помещается во внутренний список в таблице с именем ColumnSortList до позиции 0. Этот же список обновляется при каждом щелчке заголовка столбца.

Обязательно вызовите этот метод после инициализации столбца.

7 голосов
/ 18 ноября 2011

Я бы посоветовал вам получить данные, которые вы хотите отобразить, уже отсортированные. Если это так, вам нужно только установить правильный значок сортировки (по возрастанию или по убыванию):

/**
 * Displays the appropriate sorted icon in the header of the column for the given index.
 * 
 * @param columnIndex
 *            of the column to mark as sorted
 * @param ascending
 *            <code>true</code> for ascending icon, <code>false</code> for descending icon
 */
 public void setSortedColumn(int columnIndex, boolean ascending) {
      Column<T, ?> column = table.getColumn(columnIndex);
      if (column != null && column.isSortable()) {
           ColumnSortInfo info = table.getColumnSortList().push(column);
           if (info.isAscending() != ascending) {
                table.getColumnSortList().push(column);
           }
      }
 }

Если данные не могут быть отсортированы перед извлечением, вы можете отсортировать список так же, как вы это делаете, когда пользователь щелкает заголовок (onColumnSort(ColumnSortEvent event) с Comparator) перед его отображением.

...