2013-10-08 69 views
0

要查看一些數據,我使用支持分頁的表視圖 - CellTableCellTable:動態重新排序行

來標記UI我使用UIBinder

... 
<g:HTMLPanel> 
<c:CellTable pageSize='100' ui:field='myTable'/> 
<c:SimplePager ui:field='myPager' location='CENTER'/> 
</g:HTMLPanel> 
... 

在小部件我創建了一個表,分頁:

@UiField(provided=true) CellTable<myDTO> myTable; 

... 

SimplePager.Resources pagerResources = GWT.create(SimplePager.Resources.class); 
myPager = new SimplePager(TextLocation.CENTER, pagerResources, false, 0, true); 
myTable = new CellTable<myDTO>(); 
... 

然後我安裝一個選擇模型 -

final NoSelectionModel<myDTO> selectionModel = new NoSelectionModel<myDTO>(); 
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { 
    public void onSelectionChange(SelectionChangeEvent event) { 
     clickedObject = selectionModel.getLastSelectedObject(); 
    } 
});  

myTable.setPageSize(50); 
myTable.setSelectionModel(selectionModel); 

而且添加了幾列:

Column<myDTO, String> column1 = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeData1(); 
    } 
}; 

Column<myDTO, String> column2 = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeData2(); 
    } 
}; 
... 
Column<myDTO, String> columnN = new Column<myDTO, String>(new TextCell()) { 
    @Override 
    public String getValue(myDTO data) { 
     return data.getSomeDataN(); 
    } 
};  

myTable.addColumn(column1, "name of column1"); 
myTable.addColumn(column2, "name of column2"); 
... 
myTable.addColumn(columnN, "name of columnN"); 

接下來,我創建AsyncDataProvider

AsyncDataProvider<myDTO> provider = new AsyncDataProvider<myDTO>() { 
    @Override 
    // is called when the table requests a new range of data 
    protected void onRangeChanged(HasData<myDTO> display) { 

     final int start = display.getVisibleRange().getStart(); 
     final int lenght = display.getVisibleRange().getLength(); 

     myService.findAll(new AsyncCallback<List<myDTO>>() { 
      public void onFailure(Throwable caught) { 
      // exception handling here 
      } 

      public void onSuccess(List<myDTO> data) { 
      updateRowCount(data.size(), true); 
      updateRowData(0, data); 
      } 
     }); 
    } 
}; 

provider.addDataDisplay(myTable); 

當我加入他們添加到列表的末尾的新行。

我想自動添加它們時排序行 - 某些 列的升序值(或降序 - 在這種情況下並不重要)。

我該如何執行此操作?

謝謝大家。

回答

2

創建提供商之後,創造一種處理程序:

ListHandler<myDTO> sortHandler = new ListHandler<myDTO>(provider.getList()); 
myTable.addColumnSortHandler(sortHandler); 

那麼對於要排序每一列,設置一個比較器和列添加到排序列表,如:

sortHandler.setComparator(column1, new Comparator<myDTO>() { 
    public int compare(myDTO dto1, myDTO dto2) { 
     // This is an example, how you compare them depends on the context 
     return dto1.getSomeData1().compareTo(dto2.getSomeData1()); 
    } 
}); 

myTable.getColumnSortList().push(column1); 

您可以多次調用push()方法按多列進行排序。您也可以爲同一列調用它兩次以顛倒其排序順序(升序/降序)。

+0

工程很棒。謝謝! –

+0

小記。你的方法工作的很好,但在我的情況下,我決定這樣做 - 對服務器端的數據進行排序,並獲得 已排序的數據。 'asc/desc' - 取決於一些參數,我傳遞給我的* GWT RPC *服務方法的 。 –

+0

您能否告訴我,我需要在設置處理程序時調用每個列的push()。 – Ashish