2012-08-17 12 views
3

GWT CellList가 느리게 데이터를로드하는 것과 마찬가지로 GWT DataGrid에 데이터를 지연로드 할 수 있습니까?GWT DataGrid의 지연로드 데이터

잠재적으로 수백 개의 행을 다시 가져올 수있는 GWT DataGrid가 있지만 한 번에 약 20 개의 행만 표시됩니다. 이 경우 그리드 로딩이 매우 느립니다.

표시해야하는 데이터 열이 여러 개 있기 때문에 CellTList 대신 DataGrid를 사용하고 싶습니다. 그리고 난 헤더 열을 고정되기를 원하기 때문에 CellTable 대신에 DataGrid를 선택했습니다. DataGrid 이후

+4

셀리스트와 데이터 그리드는 모두 cellview 위젯입니다을, 그래서 동일한 기술은 당신이 "지연로드"는 셀리스트가 작동에 적용 DataGrid 용. 시도해 봤어? – Strelok

+0

이것을 CellTable로 구현했으며이 방법이 효과적입니다. 그러나 DataGrid를 사용하여 표시 할 때는 스크롤 막대가 ScrollPanel에 의해 생성 된 것이 아니라 DataGrid에 의해 생성 된 것입니다. 스크롤이 발생할 때 헤더를 계속 표시하려면 DataGrid를 사용하고 싶습니다. – vincentvanjoe

답변

8

, 그것은 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); 
     } 
    } 
}); 
+0

고마워, 나를 도와 줘서. 하지만 인스턴스 myDataGrid 값을 제거 할 수 있으며 작동 할 수도 있고이 값으로 바꿀 수도 있습니다. 또는 MyDataGrid.this는 내부 클래스에 있습니다. – Akkusativobjekt