gwt cell table动态列 - 排序

时间:2013-03-04 00:15:04

标签: gwt dynamic celltable dynamic-columns

您可以将“行”表示为List<String>个实例,您必须在Grid,Column和数据提供程序中将参数化从String更改为List;当然,您必须使用List<List<String>>调用updateRowData,而不是List<String>

每列还需要一个Column实例,将值从List中取出:

   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>。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您需要为要分别排序的每列添加ListHandler。有点像这样:

您必须为IndexedColumn的{​​{1}}添加getter方法:

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

可以找到{@ 3}}列排序的一个很好的基本示例。上面的代码基于此示例,但我在.setSortable(true)中使用了index,以便为列进行正确的IndexedColumn进行比较。

答案 1 :(得分:-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;
   }

}