2013-04-22 75 views
0

我目前有一个CellTable,我通过过滤/分页/排序进行了扩展。 我正在努力增加更多功能。CellTable中的GWT填充行

但是,有一件事情让我感到迷惑,例如,当您将页面的限制设置为例如10时。 如果一个对象没有10行并且只有5个并且您在它们之间切换,那么表格将跳转如果放置在中心位置,则上下。

有没有一种优雅的方式,当pageSize设置为10,那么如果表中少于10行,空行将被添加?

到目前为止我尝试过的方法会影响我的过滤/排序/分页,这是我不想要的。

编辑1:

final AsyncDataProvider<Row> provider = new AsyncDataProvider<Row>() { 

     @Override 
     protected void onRangeChanged(HasData<Row> display) { 

     int start = display.getVisibleRange().getStart(); 
     int end = start + display.getVisibleRange().getLength(); 
     end = end >= rows.getFilterList().size() ? rows.getFilterList().size() : end; 
     List<Row> sub = rows.getFilterList().subList(start, end); 
     System.out.println("Checking if extra rows needed: " + 
              table.getVisibleItems().size()); 

       for(int i = table.getVisibleItems().size(); i<10; i++){ 
        System.out.println("ADDED EMPTY ROW"); 
        sub.add(new Row()); 
       } 

     updateRowData(start, sub); 
    } 
}; 

回答

1

我有同样的问题。我通过添加null行来解决它。基本上,您需要在DataProvider中覆盖onRangeChange(HasData<T> display)以将null添加到代表要求范围的列表中。你添加足够的null来填补你想要的范围。

@Override 
protected void onRangeChanged(HasData<T> display){ 

    Range range = display.getVisibleRange(); 

    List<T> listOfObjects = getRange(range); 

    for(int i=listOfObject.size(); i<range.getLength(); i++){ 
     listOfObjects.add(null); 
    } 

    updateRowData(range.getStart(), listofObjects); 

} 

在上面的代码getRange()返回包含所请求的对象(范围内)的列表

您还可以添加一些CSS给予高度行。如果你不指定高度,那么行将会非常小,因此它们不会填充整个表格。

令人失望的是GWT不支持这种类型的填充。这种方式是我找到的最好的方式,但不幸的是,当你的行高在一张表内不同时,它会使一切变得更加困难。

寻呼

通过该解决方案上面,你就需要有一个自定义Pager,如果你想分页。你可以用getVisibleRowCount()这样的方法扩展你的AsyncDataProvider,这将返回当前子列表中有多少个对象实际上是实际数据(而不是null)。然后,你可以给AsyncDataProviderPager参考,并覆盖createText()方法:

@Override 
protected String createText(){ 

    return getPageStart() + " - " + dataProvider.getVisibileRowCount() + " of " 
       + dataProvider.getTotalRowCount(); 

} 
+0

嘿,我添加了一些代码,显示我有它目前所做的那样。但这会影响分页,显示1-10也会影响我的过滤器类。我在想也许有办法解决它而不影响表格中的数据? – Sheogora 2013-04-22 15:56:17

+0

我建议的方式不会影响分页。你所要做的就是当范围没有被满足时添加空值,你需要确保你的列知道如何处理空值(显示空单元格)。 – enrybo 2013-04-22 16:00:57

+0

我试过你的方法,并且寻呼机仍然会说1-10即使有5行有实际的数据,简单的寻呼机连接到单元格表,所以它有多少行会计算它们? – Sheogora 2013-04-23 08:26:34