GWT DataGrid列

时间:2013-10-24 21:24:07

标签: java gwt datagrid uibinder

我有一个GWT项目,它有几个DataGrids。到目前为止,我已经实现了一个(ASyncDataProvider),它的工作正常。但我真的不喜欢所有凌乱的锅炉板代码来指定列。这是一个示例:

    //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);

有没有办法减少代码量?想象一下有十几个列的表,代码变得非常繁琐。网格本身由UiBinder呈现,但似乎UiBinder无法指定DataGrid上的列。

我看过这个: Defining GWT CellTables with UiBinder 但这涉及到使用HTML表,但我不想失去DataGrid提供的所有功能,所以我不愿意采取这种方式。

欢迎任何其他建议。

1 个答案:

答案 0 :(得分:0)

使用类MyColumn,如

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";
  }
}  

然后

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

丑陋,但有效。为了使它更好,你可以使用一些与GWT一起使用的反射工具包。