1

我目前有一个CellTable我用过滤器/分页/排序扩展的。我也在努力添加更多功能。

但是让我感到困扰的一件事是,当您将页面的限制设置为例如 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);
     }
};
4

1 回答 1

2

我有同样的问题。我通过添加null行来解决它。基本上,您需要覆盖onRangeChange(HasData<T> display)您的DataProvider以添加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使用上面的解决方案,如果您想要分页,则需要自定义。您可以像这样扩展您的AsyncDataProviderwith 方法getVisibleRowCount()将返回当前子列表中有多少对象实际上是真实数据(不是null)。然后,您可以提供对 the 的引用AsyncDataProviderPager覆盖该createText()方法:

@Override
protected String createText(){

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

}
于 2013-04-22T15:47:36.787 回答