是否可以将数据延迟加载到 GWT DataGrid 中,类似于 GWT CellList 延迟加载数据的方式?
我有一个 GWT DataGrid,它可能会带回数百行,但一次只显示大约 20 行。发生这种情况时,网格的加载非常缓慢。
我想使用 DataGrid 而不是 CellTList,因为我有多列需要显示的数据。而且我选择了 DataGrid 而不是 CellTable,因为我希望修复标题列。
是否可以将数据延迟加载到 GWT DataGrid 中,类似于 GWT CellList 延迟加载数据的方式?
我有一个 GWT DataGrid,它可能会带回数百行,但一次只显示大约 20 行。发生这种情况时,网格的加载非常缓慢。
我想使用 DataGrid 而不是 CellTList,因为我有多列需要显示的数据。而且我选择了 DataGrid 而不是 CellTable,因为我希望修复标题列。
由于DataGrid
不公开它ScrollPanel
,因此创建一个内部类来扩展DataGrid
并提供对 的引用ScrollPanel
:
private static class MyDataGrid<T> extends DataGrid {
public ScrollPanel getScrollPanel() {
HeaderPanel header = (HeaderPanel) getWidget();
return (ScrollPanel) header.getContentWidget();
}
}
初始化此工作所需的变量:
private MyDataGrid<MyDataType> myDataGrid;
private int incrementSize = 20;
private int lastScrollPos = 0;
在构造函数中,创建网格:
myDataGrid = new MyDataGrid<MyDataType>();
然后使用刚刚创建的 getScrollPanel() 引用添加一个 ScrollHandler:
myDataGrid.getScrollPanel().addScrollHandler(new ScrollHandler(){
@Override
public void onScroll(ScrollEvent event) {
int oldScrollPos = lastScrollPos;
lastScrollPos = myDataGrid.getScrollPanel().getVerticalScrollPosition();
// If scrolling up, ignore the event.
if (oldScrollPos >= lastScrollPos) {
return;
}
//Height of grid contents (including outside the viewable area) - height of the scroll panel
int maxScrollTop = myDataGrid.getScrollPanel().getWidget().getOffsetHeight() -
myDataGrid.getScrollPanel().getOffsetHeight();
if(lastScrollPos >= maxScrollTop) {
myDataGrid.setVisibleRange(0,myDataGrid.getVisibleRange().getLength()+incrementSize);
}
}
});