, 그것은 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);
}
}
});
셀리스트와 데이터 그리드는 모두 cellview 위젯입니다을, 그래서 동일한 기술은 당신이 "지연로드"는 셀리스트가 작동에 적용 DataGrid 용. 시도해 봤어? – Strelok
이것을 CellTable로 구현했으며이 방법이 효과적입니다. 그러나 DataGrid를 사용하여 표시 할 때는 스크롤 막대가 ScrollPanel에 의해 생성 된 것이 아니라 DataGrid에 의해 생성 된 것입니다. 스크롤이 발생할 때 헤더를 계속 표시하려면 DataGrid를 사용하고 싶습니다. – vincentvanjoe