2013-03-04 86 views
1

您可以将您的“行”表示为List<String>实例,您必须在Grid,Column和数据提供程序中将参数化从String更改为List;当然你必须用List<List<String>>而不是List<String>来调用updateRowData。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 /程序化,celltable排序功能于GWT-不工作的/ 13767108#13767108 – Adarsha 2013-03-04 03:23:18

回答

-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添加到要分开排序的每列中。有点像这样:

你必须一个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)

列排序的一个很好的基本示例可以找到here。上面的代码基于此示例,但我使用indexIndexedColumn为了得到适当的String列进行比较。