2

我有一个 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 Table,但我不想失去 DataGrid 提供的所有功能,所以我不愿意走这条路。

欢迎任何其他建议。

4

1 回答 1

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 一起使用的反射工具包。

于 2013-10-24T22:44:48.117 回答