Обновление значения ячейки столбца GWT CELLTABLE

Я использую gwt2.3

Моя таблица ячеек содержит 10 строк, 5 столбцов.

Все ячейки в 1-й строке пусты, доступны для редактирования.

Всякий раз, когда пользователь нажимает на ячейку столбца, скажем, 1-я строка X 3-й столбец, тогда пользователь будет редактировать эту ячейку, сказав «xyz». после этого, когда пользователь нажимает кнопку: «обновить ячейку столбца», значение xyz устанавливается для всех ячеек, присутствующих в этом столбце.

Я использую другой тип ячейки в таблице ячеек.

Как установить/обновить значение всей ячейки в этом конкретном столбце/странице, чья 1-я ячейка редактируется

Любая помощь или руководство в этом вопросе будут оценены


person StackOverFlow    schedule 05.09.2011    source источник


Ответы (1)


Создайте FieldUpdater, чтобы отодвинуть изменения в объекте домена. Затем в обратном вызове onClick вашей кнопки обновите свой список значениями из первой строки.

Например, для произвольного TextInputColumn, который принимает класс MyDTO (может быть любым объектом домена) в качестве типа значения, вы можете определить следующий FieldUpdater:

myColumn.setFieldUpdater(new FieldUpdater() {

    @Override
    public void update(int index, MyDTO object, String value) {
        // Push the changes into the MyDTO. At this point, you could send an
        // asynchronous request to the server to update the database.
        object.someField = value;

        // Redraw the table with the new data.
        table.redraw();
    }
});

Вы должны установить такой FieldUpdater для всех 5 столбцов. (someField — это поле в вашем DTO, которое вы хотите обновить).

Теперь в обратном вызове onClick() кнопки вы должны обновить фактический список. Выглядит примерно так:

update_column_cell.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
         //Supose listDataProvider is the instance of your DataSource for your CellTable
         List<MyDTO> list = listDataProvider.getList();
         // get cell values for the first row (this is for one cell)
         newSomeField = list.get(0).someField;
         newSomeField2 = list.get(0).someField2;
         for (int i = 1;i<list.size();i++) {
              MyDTO dto = list.get(i);
              if (newSomeField != null && newSomeField.isNotEmpty()) {
                    dto.someField = newSomeField;
              }
              if (newSomeField2 != null && newSomeField2.isNotEmpty()) {
                    dto.someField2  = newSomeField2;
              }
         }
    }
})

Этот пример обрабатывает только два поля вашего DTO. Вам, вероятно, придется расширить его, чтобы охватить все 5 полей, которые вы показываете в виде столбцов в своей CellTable.

person Ümit    schedule 05.09.2011