2013-04-25 2 views
2

GWT를 사용하여 Datagrid를 만드는 데 시간이 많이 걸립니다. GWT의 문서에 따라 테이블을 만들었고 데이터를 추가했지만 데이터 그 자체가 나타나지 않습니다. 내가 뭘 놓치고 있니? 나는 내 머리카락을 찢어 놓았다고 느낀다. 나는 aysnc 전화를 걸면 문제가 될 것 같지만 오류는 없다. 컴파일하고 코드의이 부분을 실행할 때 화면에 아무 것도 나타나지 않고 데이터 그리드가 도크에 있어야하는 영역이 비어 있습니다. 나는 사소한 것을 잊어 버렸는가?GWT DataGrid를 표시 할 수 없습니다.

 static int orderID = 1001; 
     private static List<OrderLine> orderLineList = new ArrayList<OrderLine>(); 

     final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>(); 
     dgOrder.setWidth("100%");     

     //set columns 
     TextColumn<OrderLine> orderLineIdColumn = new TextColumn<OrderLine>(){ 
      @Override 
      public String getValue(OrderLine object) { 
       return Integer.toString(object.getOrderLineID()); 
      } 
     }; 
     dgOrder.addColumn(orderLineIdColumn, "OrderLine ID"); 

     TextColumn<OrderLine> productColumn = new TextColumn<OrderLine>(){ 
      @Override 
      public String getValue(OrderLine object) { 
       return getProductName(object.getProductNumber()); 
      } 
     }; 
     dgOrder.addColumn(productColumn, "Product"); 

     TextColumn<OrderLine> quantityColumn = new TextColumn<OrderLine>(){ 
      @Override 
      public String getValue(OrderLine object) { 
       return Integer.toString(object.getQuantity()); 
      } 
     }; 
     dgOrder.addColumn(quantityColumn, "Quantity"); 

     // add data to datagrid 
     Ioma.dataservice.getOrderLines(orderID, new AsyncCallback<ArrayList<OrderLine>>(){ 
      @Override 
      public void onFailure(Throwable caught) {// TODO Auto-generated method stub 
       System.out.println("error in retrieving GP.getOrderLines" + caught.toString()); 
      } 
      @Override 
      public void onSuccess(ArrayList<OrderLine> result) { 
       // TODO Auto-generated method stub 
       //yes i realize I could also set it to "result" but I use the result in other places as well, I have also tried setting it to result with no success 
       orderLineList = result; 
       dgOrder.setRowData(0, orderLineList); 
      } 
     }); 

     //add datagrid to the dock 
     dock.add(dgOrder, DockPanel.EAST); 

     //add dock to mainPanel 
     return dock; 

답변

0

내 주장이 내 선언이었습니다.

final DataGrid<OrderLine> dgOrder = new DataGrid<OrderLine>(); 

이 작동하는 이유는 찾을 수 없습니다

final CellTable<OrderLine> dgOrder = new CellTable<OrderLine>(); 

해야하지만, 그것은 않습니다. 나는 지금 나의 테이블을 볼 수있다. 당신은 명시 적으로 내가 궁금해하는 DataGrid의 인스턴스를 호출하지 않아?

+0

나는 CellTables과 DataGrids가 어떤 크기 여야 하는지를 결정하는 다른 방법이 있다고 생각한다. DataGrid는 훨씬 까다 롭고 어떤 경우에는 대안이 없으면 작동하지 않습니다. 예를 들면 다음과 같습니다. http://stackoverflow.com/a/15011854/738081 – hiddenwaffle

+1

위 코드로 수행 한 작업은 celltable입니다. Datagrid는 다른 (더 좋은) 위젯입니다. 올바른 표시되지 않는 이유는 올바른 포함 패널을 사용하고 있지 않기 때문입니다 (크기를 지원해야 함). – Sasquatch

5

DataGrid을 사용할 때 명시적인 크기를 지정해야합니다. CellTable의 경우에는 그렇게 할 필요가 없습니다.

DataGrid을 사용하고 있었을 때 높이와 너비가 모두 0 인 경우. 그래서 하나가 명시 적으로 크기를 설정해야합니다

DataGrid<OrderLine> grid = new DataGrid<OrderLine>; 
grid.setWidth("500px"); 
grid.setHeight("600px"); 
dock.add(dgOrder, DockPanel.EAST); 

또는 당신은 ProvidesResize 위젯의 조롱을 넣을 수 있습니다. 따라서 귀하의 경우에는 DockPanel과 대조적으로 DockLayoutPanel으로 작동하게 할 수 있다고 생각합니다.

1

나는 smilliar problem을 가졌다. SimpleLayoutPanel과 같은 ProvidesResize 인터페이스를 구현하는 Panel에 DataGrid를 배치하십시오. 또한 내 경우에는 SimpleLayoutPanel의 크기를 설정하는 데 도움이됩니다.

관련 문제