Создайте FieldUpdater, чтобы отодвинуть изменения вашего объекта Domain. Затем в функции обратного вызова 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