Универсальный InputCell для столбца gwt (измените тип ячейки или узнайте тип ячейки свойства перед созданием конструктора столбца)
В нашем существующем проекте GWT у нас есть таблица с несколькими ячейками. Мы используем com.google.gwt.user.cellview.client.Column.Column
для столбцов этой таблицы. Вот наш текущий код:
private void addColumns() {
// label column
final Column<Property, String> labelColumn = new Column<Property, String>(new TextCell()) {
@Override
public String getValue(final Property object) {
return object.getPdf().getName();
}
};
this.datagrid.addColumn(labelColumn, "Label");
this.datagrid.setColumnWidth(labelColumn, 40, Unit.PX);
// value column
final Column<Property, String> valueColumn = new Column<Property, String>(new TextInputCell()) {
@Override
public String getValue(final Property object) {
return object.getValue();
}
};
valueColumn.setFieldUpdater(new FieldUpdater<Property, String>() {
@Override
public void update(final int index, final Property object, final String value) {
final Property existingObject = containsObject(object);
if (existingObject != null) {
existingObject.setValue(value);
} else {
// else add the object to the "editedFields" list
object.setValue(value);
UserDefinedFieldsValuesDiv.this.editedProperties.add(object);
}
}
});
this.datagrid.addColumn(valueColumn, "Waarde");
this.datagrid.setColumnWidth(valueColumn, 40, Unit.PX);
}
Это сгенерирует таблицу следующим образом:
В настоящее время все TextInputCell
, но я хочу изменить это в зависимости от типа столбца. Так что, если это дата, я хочу DatePickerCell и т. Д.
В следующем сегменте кода:
// value column
final Column<Property, String> valueColumn = new Column<Property, String>(new TextInputCell()) {
@Override
public String getValue(final Property object) {
return object.getValue();
}
};
Это дает new TextInputCell()
в качестве параметра, но только внутри этого столбца я могу получить тип с помощью object.getType().name().equals(Type.DATE.name())
, Я посмотрел в исходном коде Column
, но есть только getCell
метод, нет setCell
, Есть ли способ изменить тип ячейки столбца, ИЛИ способ заранее узнать, какой тип ячейки (который я могу получить из Property
)?
PS: Это мой первый день использования GWT, поэтому я, возможно, еще не очень знаком с некоторыми вещами.
РЕДАКТИРОВАТЬ:
Так что я пытаюсь добиться чего-то вроде этого:
// value column
AbstractCell cell = new TextInputCell();
Property propertyISomehowRetrieved = ...;
if (propertyISomehowRetrieved.getType().name().equals(Type.DATE.name())){
cell = new DatePickerCell();
} else if(propertyISomehowRetrieved.getType().name().equals(Type.NUMERIC.name())){
cell = new NumberCell();
} else if(propertyISomehowRetrieved.getType().name().equals(Type.BOOLEAN.name())){
cell = new CheckboxCell();
}
final Column<Property, String> valueColumn = new Column<Property, String>(cell) {
@Override
public String getValue(final Property object) {
return object.getValue();
}
};
Но как мне получить это свойство?
1 ответ
Каждый столбец может использовать только одну ячейку. Вот почему тип ячейки передается в конструктор и не может быть изменен. Вы не можете использовать разные ячейки для разных строк, как показано в вашем примере.
Когда вы строите DataGrid с несколькими столбцами, вы можете добавлять различные столбцы на основе свойств объекта, которые эта DataGrid будет отображать. Например, если ваш объект имеет два свойства "Дата" и "Заголовок", вы можете добавить два столбца с помощью DatePickerCell и TextInputCell. Поскольку это ваш объект, вы знаете типы свойств, прежде чем создавать DataGrid, поэтому вы можете добавить правильные столбцы и выбрать нужный тип ячейки при его создании.