在 GWT 数据网格中延迟加载数据



是否可以将数据延迟加载到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);
        }
    }
});

最新更新