我目前有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);
}
};
答案 0 :(得分: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
。您可以使用AsyncDataProvider
之类的方法扩展getVisibleRowCount()
,这将返回当前子列表中实际数据中的对象数量(不是null
)。然后,您可以将AsyncDataProvider
的引用提供给Pager
并覆盖createText()
方法:
@Override
protected String createText(){
return getPageStart() + " - " + dataProvider.getVisibileRowCount() + " of "
+ dataProvider.getTotalRowCount();
}