2013-10-24 7 views
2

여러 개의 DataGrid가있는 GWT 프로젝트가 있습니다. 지금까지 나는 (ASyncDataProvider과 함께) 하나를 구현했으며 잘 작동합니다. 그러나 나는 모든 지저분한 보일러 - 플레이트 코드가 열을 지정하는 것을 정말로 좋아하지 않습니다. 여기에 샘플이 있습니다 :GWT DataGrid columns

//some column 
    Column<DataRecord, String> dataColumn = new Column<DataRecord, String>(new TextCell()) { 
     public String getCellStyleNames(Context ctx, DataRecord record) { 
      //some columns have a style based on the value, calculate style here 
     } 
     public String getValue(DataRecord record) { 
      return record.getProperty(); 
     } 
    }; 
    dataGrid.addColumn(dataColumn); 
    dataGrid.setColumnWidth(dataColumn, 25, Unit.PX); 

코드의 양을 줄이는 방법이 있습니까? 12 개 정도의 열이있는 테이블을 상상해보십시오. 코드는 매우 지루합니다. 그리드 자체는 UiBinder에 의해 렌더링되지만 UiBinder는 DataGrid에서 열을 지정하는 것까지 갈 수 없습니다.

나는 이것 좀 했어 : Defining GWT CellTables with UiBinder 을하지만이 HTML 테이블을 사용하는 것입니다,하지만 난 데이터 그리드에서 제공하는 모든 기능을 잃고 싶지 않아, 내가 그 길을 꺼려 해요.

다른 제안 사항도 환영합니다.

답변

0

사용 클래스

private class MyColumn extends Column<DataRecord, String> 
{ 
    private String field; 
    public MyColumn(String field) 
    { 
    super(new TextCell()); 
    this.field = field; 
    } 

    public String getValue(DateRecord rec) 
    { 
    if (this.field.equals("prop1") 
     return rec.getProp1(); 
    else if (this.field.equals("prop2") 
     return rec.getProp2(); 
    else 
     return "ERROR"; 
    } 
} 

같은 MyColumn 다음

dataGrid.addColumn(new MyColumn("prop1")); 
dataGrid.addColumn(new MyColumn("prop2")); 

못생긴,하지만 작동합니다. 더 좋게 만들려면 GWT에서 작동하는 리플렉션 툴킷을 사용할 수 있습니다.