У меня есть следующие CellTable GWT CellTable: Как обновить TextBox Динамически
Когда пользователь нажимает на Pay Мин. CheckBox, он должен скопировать значение из Нужно теперь перейти к Оплатить сегодня текстовое поле И пересчитать итоговое значение для Pay Today column.
Вот код для CheckboxCell и TextInputCell (Pay Сегодня) Столбцы (Pay Min.):
private Column<AccountInvoice, Boolean> buildPayMin() {
columnPayMin = new Column<AccountInvoice, Boolean>(new CheckboxCell(true, false)) {
@Override
public Boolean getValue(AccountInvoice object) {
return object.isPayMinimum();
}
@Override
public void onBrowserEvent(Context context, Element elem, AccountInvoice object, NativeEvent event){
// Get event type
int eventType = Event.as(event).getTypeInt();
// See if this is a 'change' event
if (eventType == Event.ONCHANGE) {
String value = columnMinDue.getValue(object);
// Get the cell to copy the value from
TextInputCell cell = (TextInputCell) columnPayToday.getCell();
// Re-create the view data for the cell
TextInputCell.ViewData viewData = new TextInputCell.ViewData(value);
cell.setViewData(object, viewData);
// Refresh
cellTable.redraw();
event.preventDefault();
event.stopPropagation();
}
}
};
columnPayMin.setDataStoreName(columnPayMinHeader);
columnPayMin.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
columnPayMin.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
return columnPayMin;
}
// -----------------------------------------------------------
private Column<AccountInvoice, String> buildPayToday() {
columnPayToday = new Column<AccountInvoice, String>(new TextInputCell()) {
@Override
public String getValue(AccountInvoice object) {
return object.getPaymentAmount();
}
};
columnPayToday.setDataStoreName(columnPayTodayHeader);
columnPayToday.setFieldUpdater(new FieldUpdater<AccountInvoice, String>() {
@Override
public void update(int index, AccountInvoice object, String value) {
object.setPaymentAmount(value);
cellTable.redraw();
}
});
return columnPayToday;
}
я могу получить значение скопировать, но общая сумма для Pay Today столбец не обновляется. Кажется, он обновляется только тогда, когда значение вводится вручную в текстовое поле Pay Today. Я даже пробовал делать:
columnPayToday.getFieldUpdater().update(context.getIndex(), object, value);
, который тоже не помог.
Спасибо за любую помощь, которую вы могли бы предоставить.
Благодарим вас за ответ. Пожалуйста, посмотрите, как я изменил код в соответствии с вашими предложениями: http://pastebin.com/Z4bQYrzf К сожалению, он по-прежнему не работает. *** 'Window.alert' *** запускает только те, что-то ***' dataProviderList.refresh() '***, следуя за ним, убивает его, и он не срабатывает, даже если флажок установлен снова. Я также решил использовать *** FieldUpdater *** вместо *** onBrowserEvent ***, который не имеет никакого эффекта, но код короче. – user1576840
Вы все еще вызываете 'cellTable.redraw()' - на этот раз в FieldUpdater в другом столбце. Ваш плохой стол постоянно перерисовывается! Вы почти никогда не должны вызывать redraw() в любом месте вашего кода. –
Спасибо! Я исправил проблему, и она прекрасно работает сейчас! – user1576840