我有以下 CellTable
当用户点击 Pay Min。 CheckBox时,它应该将截止日期列中的值复制到立即付款文字字段并重新计算立即支付列的总计。
以下是 CheckboxCell ( Pay Min。)和 TextInputCell (立即付款)的代码列:
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;
}
我可以获得要复制的值,但立即付款列的总数不会刷新。只有在立即支付文本字段中手动输入值时,它才会刷新。我甚至尝试过:
columnPayToday.getFieldUpdater().update(context.getIndex(), object, value);
也没有帮助。
感谢您提供的任何帮助。
答案 0 :(得分:2)
ViewData
表示TextInputCell中的临时值。当您调用cellTable.redraw()
时,TextInputCell将恢复为原始值(该列的getValue()
方法中的值)。
如果您只想修改&#34;视图&#34;请勿重绘表格。 TextInputCell的状态,或调用accountInvoice.setPayToday#
(或其他任何方法)来更新对象,然后在ListDataProvider上调用refresh()(与重绘相比,这是一种更有效的更新表的方法)。