2013-03-04 5 views
1

Вы можете представить свои «строки» как экземпляры List<String>, вы должны изменить свою параметризацию из String to List в свой поставщик сетки, столбца и данных; и, конечно, вы должны называть updateRowData List<List<String>>, а не List<String>.динамические столбцы таблицы gwt - сортировка

Кроме того, необходим один экземпляр столбца на столбец, принимающее значение из списка по индексу:

class IndexedColumn extends Column<List<String>, String> { 

     private final int index; 

     public IndexedColumn(int index) { 
      super(new EditTextCell()); 
      this.index = index; 
     } 

     @Override 
     public String getValue(List<String> object) { 
      return object.get(this.index); 
     } 

    } 

Как добавить сортировку этого примера. Я попробовал ListHandler, но не уверен, как сравнить List<String>. Любая помощь приветствуется.

+0

Посмотрите на ссылке ниже - http://stackoverflow.com/questions/ 13752633/programatic-celltable сортировки-в-GWT-не-работает/13767108 # 13767108 – Adarsha

ответ

-1

Вот код сетки данных

indexedColumn.setSortable(true); 
sortHandler.setComparator((Column<T, ?>) indexedColumn, (Comparator<T>) indexedColumn.getComparator(true)); 

Вот фактический класс

public class IndexedColumn extends Column<List<String>, String> 
{ 
    private Comparator<List<String>> forwardComparator; 
    private Comparator<List<String>> reverseComparator; 
    private final int index; 

    public IndexedColumn(int index) 
    { 
     super(new TextCell()); 
     this.index = index; 
    } 

    @Override 
    public String getValue(List<String> object) 
    { 
     return object.get(index); 
    } 

    public Comparator<List<String>> getComparator(final boolean reverse) 
    { 
     if (!reverse && forwardComparator != null) 
     { 
     return forwardComparator; 
     } 
     if (reverse && reverseComparator != null) 
     { 
     return reverseComparator; 
     } 
     Comparator<List<String>> comparator = new Comparator<List<String>>() 
     { 
     public int compare(List<String> o1, List<String> o2) 
     { 
      if (o1 == null && o2 == null) 
      { 
       return 0; 
      } 
      else if (o1 == null) 
      { 
       return reverse ? 1 : -1; 
      } 
      else if (o2 == null) 
      { 
       return reverse ? -1 : 1; 
      } 

      // Compare the column value. 
      String c1 = getValue(o1); 
      String c2 = getValue(o2); 
      if (c1 == null && c2 == null) 
      { 
       return 0; 
      } 
      else if (c1 == null) 
      { 
       return reverse ? 1 : -1; 
      } 
      else if (c2 == null) 
      { 
       return reverse ? -1 : 1; 
      } 
      int comparison = ((String) c1).compareTo(c2); 
      return reverse ? -comparison : comparison; 
     } 
     }; 

     if (reverse) 
     { 
     reverseComparator = comparator; 
     } 
     else 
     { 
     forwardComparator = comparator; 
     } 
     return comparator; 
    } 

} 
1

Вам необходимо добавить ListHandler в каждую колонку, которую вы хотите отсортировать отдельно. Вроде как это:

Вы должны добавить геттер в IndexedColumn для index:

class IndexedColumn extends Column<List<String>, String> { 

    private final int index; 

    public IndexedColumn(int index) { 
     super(new EditTextCell()); 
     this.index = index; 
    } 

    @Override 
    public String getValue(List<String> object) { 
     return object.get(this.index); 
    } 

    public int getIndex(){ 
     return index; 
    } 

} 

Затем вам нужно добавить ListHandler к CellTable:

ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(list); 
    columnSortHandler.setComparator(columnName, new Comparator<List<String>>() { 

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

      // Compare the column. 
      if (o1 != null) { 
      int index = columnName.getIndex(); 
      return (o2 != null) ? o1.get(index).compareTo(o2.get(index)) : 1; 
      } 
      return -1; 
     } 
    }); 
table.addColumnSortHandler(columnSortHandler); 

В приведенном выше примере list находится объект List<List<String>>. Объектом columnName является объект Column. Вам нужно будет сделать это для каждого столбца, который вы хотите отсортировать.

Не забудьте также позвонить .setSortable(true) на каждую из столбцов, которые вы будете сортировать.

Хороший базовый пример сортировки колонн можно найти here. Вышеприведенный код основан на этом примере, но я использовал ваш index в IndexedColumn, чтобы получить нужный String для столбца, чтобы выполнить сравнение.