Универсальный 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, поэтому вы можете добавить правильные столбцы и выбрать нужный тип ячейки при его создании.

Другие вопросы по тегам