我有一个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提供的所有功能,所以我不愿意采取这种方式。
欢迎任何其他建议。
答案 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一起使用的反射工具包。