gwt - 在 GWT DataGrid 中延迟加载数据

标签 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);
        }
    }
});

关于gwt - 在 GWT DataGrid 中延迟加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11997130/

相关文章:

eclipse - GWT RPC 的 Google 示例在 Eclipse 中返回 HTTP 错误 405

java - 如何在GXT中获取Button

java - MVP GWT 项目中的页眉/页脚

gwt - 为 Java 11 更新 Vaadin 项目的 GWT

java - 处理 GWT RequestFactory 服务器错误响应

string - 如何使用 GWT 将字节数组转换为字符串,并将字符串转换为字节数组?

java - 对于每个代码更改都需要导出 war 并重新启动服务器

带有大文件的 GWT ExternalTextResource

java - GWT 定时器性能

java - 如何改进 GWT XML 解析?