我试图在CellTable中实现分页,但它目前正在显示" 1-10 of 10"记录而不是" 1-10 of 1000"记录。我不确定在哪里可以更新总记录数。我的AsyncDataProvider看起来像这样:
AsyncDataProvider<OutletSearchVO> latestProvider = new AsyncDataProvider<OutletSearchVO>() {
@Override
protected void onRangeChanged(HasData<OutletSearchVO> display) {
final int start = display.getVisibleRange().getStart();
int length = display.getVisibleRange().getLength();
AsyncCallback<List<OutletSearchVO>> callback = new AsyncCallback<List<OutletSearchVO>>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(List<OutletSearchVO> result) {
updateRowData(start, result);
}
};
// The remote service that should be implemented
service.getOutletPage(start, length, callback);
}
};
我用来获取记录的SQL类似于:
SELECT *
FROM (SELECT outlet_id,
outlet_name,
image,
ROWNUM rn
FROM ( SELECT outlet_id outlet_id,
account_name outlet_name,
image_score image,
FROM outlets)
ORDER BY OOI.created_on DESC, OOI.account_name))
WHERE rn > ? AND rn < ?
问号由准备好的陈述中的开始和结束范围取代。
答案 0 :(得分:4)
您必须在updateRowCount
内拨打AsyncDataProvider
(类似于您呼叫updateRowData
的方式),这意味着您必须向服务器询问该计数(或至少是近似值) ,然后选择是否将true
或false
作为第二个参数传递给updateRowCount
。
当然,您也可以从updateRowCount
之外拨打onRangeChange
,特别是如果您可以预先了解您将拥有多少行,并且该数字不会发生太大变化。< / p>