GWT细胞表动态列 - 排序(gwt cell table dynamic columns - so

2019-08-17 07:29发布

你可以代表你的“行”的List<String>情况下,你必须从改变你的字符串参数在你的网格,列和数据提供者列表; 当然,你得叫updateRowData一个List<List<String>> ,而不是一个List<String>

您还需要每列一列的情况下,取出来的值通过索引列表的:

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

Answer 1:

您需要将添加ListHandler到要单独对各栏排序。 有点像这样:

你必须一个getter方法添加到IndexedColumnindex

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;
    }

}

然后,你需要一个添加ListHandlerCellTable

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);

在上面的示例listList<List<String>>对象。 该columnNameColumn对象。 你必须为要排序的每一列做到这一点。

不要忘了还叫.setSortable(true)在每一个你会排序的列。

列排序的一个好基本的例子可以发现在这里 。 上面的代码是基于这个例子,但我用你的indexIndexedColumn ,以获得正确的String为列做比较。



Answer 2:

下面是数据网格码

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;
   }

}


文章来源: gwt cell table dynamic columns - sorting