2013-03-04 82 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列進行比較。