是否可以將數據懶惰地加載到GWT DataGrid中,類似於GWT CellList如何加載數據?GWT DataGrid中的惰性負載數據
我有一個GWT DataGrid可以帶回數百行,但一次只能顯示大約20行。發生這種情況時,網格的加載速度很慢。
我想使用DataGrid而不是CellTList,因爲我需要顯示多列數據。我選擇了DataGrid而不是CellTable,因爲我想要修正標題列。
是否可以將數據懶惰地加載到GWT DataGrid中,類似於GWT CellList如何加載數據?GWT DataGrid中的惰性負載數據
我有一個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>();
然後添加一個的scrollHandler,用剛剛創建的getScrollPanel()參考:
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);
}
}
});
謝謝,幫助我。但是你可以刪除實例myDataGrid的值,它也可以工作,或者用它替換它。或MyDataGrid.this在內部類中。 – Akkusativobjekt 2012-12-12 12:32:29
CellList和DataGrid都是cellview小工具,讓您應用相同的技術,「懶加載」一CellList將工作爲DataGrid。你有沒有嘗試過? – Strelok 2012-08-17 00:12:35
我已經實現了這個CellTable,這個工程。然而,當我用DataGrid做它時,我相信顯示的滾動條是由DataGrid生成的,而不是由ScrollPanel生成的。我想使用一個DataGrid,因爲我希望頭像在滾動發生時保持可見。 – vincentvanjoe 2012-08-17 18:01:34