2011-01-05 84 views
7

我困在我想附加到单元格表的gwt单元寻呼机上。我设置是这样的:GWT简单寻呼机帮助

List <ForumMessage> AllMessages=populated from an rpc; 
CellTable cellTable = new CellTable <ForumMessage>(); 
simplePager = new SimplePager(); 
cellTable.addColumn(ColumnM); 
cellTable.setRowData(0,AllMessages); 
simplePager.setDisplay(cellTable); 
simplePager.setPageSize(3); 

ColumnM已经正确定义

但正在显示单元格表时,排前三正确显示,但是当我按下旁边,没有行显示和细胞表就好像加载一样。现在从那个页面开始,如果我按回来,页面就好像加载一样。现在

,另一个问题是,我可以不断地按Next和页面数量不断即使只有8行

回答

14

我碰到了同样的问题,当我第一次尝试使用单元格表添加分页。它以这样的方式实现,即使在你调用setRowSize之后,寻呼机也不会对你的数据集做任何假设。这是这种架构,以便您可以执行延迟加载。

一旦你知道有多少行数据可用,你需要拨打cellTable.setRowCount(int),这将解决你的问题寻呼机继续前进。现在,要实现分页,您还需要将一个RangeChangeHandler添加到单元格表以设置数据。下面是一些示例代码:

@Override 
public void onRangeChange(RangeChangeEvent event) 
{ 
    Range range = cellTable.getVisibleRange(); 
    int start = range.getStart(); 
    int length = range.getLength(); 
    List<ForumMessage> toSet = new ArrayList<ForumMessage>(length); 
    for (int i = start; i < start + length && i < AllMessages.size(); i++) 
     toSet.add((ForumMessage) AllMessages.get(i)); 
    cellTable.setRowData(start, toSet); 
} 
+0

谢谢,它很好,我疯了这个! – Noor 2011-01-06 04:56:15

+1

我发现,当你没有设置cellTable.setRowCount(int)它会自动工作。如果有人感兴趣,我可以通过代码片段进行确认。 – Xorty 2011-06-13 14:30:43

+0

以上例子中的“结果”是什么? – sap 2011-06-30 01:04:46

4

这可能是更容易使用ListDataProvider<T>,而不是仅仅提供名单。所以,你的例子是:

// get the list 
List <ForumMessage> AllMessages=populated from an rpc; 

// create table 
CellTable cellTable = new CellTable <ForumMessage>(); 
cellTable.addColumn(ColumnM); 

// create pager 
simplePager = new SimplePager(); 
simplePager.setDisplay(cellTable); 
simplePager.setPageSize(3); 

// create data provider 
ListDataProvider<ForumMessage> dataProvider = new ListDataProvider<ForumMessage>(); 
dataProvider.addDataDisplay(cellTable); 
dataProvider.setList(AllMessages); 
3

我面临同样的问题,而我只需要设置cellTable的页面大小和删除寻呼机这样的页大小:

List <ForumMessage> AllMessages=populated from an rpc; 
CellTable cellTable = new CellTable <ForumMessage>(); 
simplePager = new SimplePager(); 
cellTable.addColumn(ColumnM); 
cellTable.setRowData(0,AllMessages); 
simplePager.setDisplay(cellTable); 
// set the PageSize of the cellTable 
cellTable.setPageSize(3); 
-1

在这里我的测试与GWT 2.5 - 我使用AsyncDataProvider:

SimplePager sp = new SimplePager(TextLocation.LEFT, true, 
      2 * ct.getPageSize(), true); 

AsyncDataProvider<Menu> adp = new AsyncDataProvider<Menu>() { 
     @Override 
     protected void onRangeChanged(HasData<Menu> display) { 
      final Range range = display.getVisibleRange(); 
      ColumnSortInfo csi = ct.getColumnSortList().get(0); 

      String dataStoreName = csi.getColumn().getDataStoreName(); 
      boolean isAscending = csi.isAscending(); 

      AAFcms.getAAFService().getAdminMenu(
        new AdminMenuReq(range, dataStoreName, isAscending), 
        new AsyncCallback<AdminMenuResp>() { 
         @Override 
         public void onFailure(Throwable caught) { 
          System.out.println(caught.getStackTrace()); 
          // TODO Auto-generated method stub 
         } 

         @Override 
         public void onSuccess(AdminMenuResp result) { 
          ct.setRowData(range.getStart(), 
            result.getMenus()); 
          ct.setRowCount(result.getRows(), true); 
         } 
        }); 
     } 
    };