3

GWT CellListがデータを遅延ロードするのと同様に、データを遅延してGWT DataGridにロードすることは可能ですか?

数百行を戻す可能性のあるGWTDataGridがありますが、一度に表示されるのは約20行だけです。これが発生すると、グリッドの読み込みが非常に遅くなります。

表示する必要のあるデータの列が複数あるため、CellTListの代わりにDataGridを使用したいと思います。また、ヘッダー列を修正したいので、CellTableではなくDataGridを選択しました。

4

1 に答える 1

8

DataGridを公​​開しないので、 :への参照を拡張して提供するScrollPanel内部クラスを作成します。DataGridScrollPanel

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);
        }
    }
});
于 2012-08-17T23:27:10.897 に答える