Gwt CellTable仅按页面排序

时间:2013-10-11 06:11:41

标签: sorting gwt celltable

GWT CellTable列仅逐页排序,对于每个页面,我必须单击列标题 用于分类。 如何在单个标题单击上对整个数据进行排序。 这是我的代码,

   dataProvider = new ListDataProvider<List<NamePair>>();
   dataProvider.addDataDisplay(dgrid);
   List<List<NamePair>> list = dataProvider.getList();

   for (List<NamePair> contact : test) {
      dataProvider.setList(test);
      list.add(contact);
   }


   ListHandler<List<NamePair>> columnSortHandler = new ListHandler<List<NamePair>>(dataProvider.getList());
   System.out.println("Column count->"+dgrid.getColumnCount());

   for(int j=0 ; j<dgrid.getColumnCount();j++){             
        final int val = j;
        columnSortHandler.setComparator(dgrid.getColumn(val), new Comparator<List<NamePair>>() {

        public int compare(List<NamePair> o1, List<NamePair> o2) {
          if (o1 == o2) {
            return 0;
         }

         // Compare the column.
         if (o1 != null) {
            int index = val;
            return (o2 != null) ? o1.get(index-2).compareTo(o2.get(index-2)) : 1;
         }
         return -1;
        }
    });
}

dgrid.addColumnSortHandler(columnSortHandler);

1 个答案:

答案 0 :(得分:1)

我建议您覆盖ListHandler,覆盖并调用super.onColumnSort(ColumnSortEvent)来调试onColumnSort(ColumnSortEvent)方法,您将非常快速地了解正在发生的事情。

该方法的源代码非常直接

public void onColumnSort(ColumnSortEvent event) {
  // Get the sorted column.
  Column<?, ?> column = event.getColumn();
  if (column == null) {
    return;
  }

  // Get the comparator.
  final Comparator<T> comparator = comparators.get(column);
  if (comparator == null) {
    return;
  }

  // Sort using the comparator.
  if (event.isSortAscending()) {
    Collections.sort(list, comparator);
  } else {
    Collections.sort(list, new Comparator<T>() {
      public int compare(T o1, T o2) {
        return -comparator.compare(o1, o2);
      }
    });
  }
}