最终的解决方案如下所示:
grid.addListener(Events.AfterEdit, new Listener<GridEvent<BeanModel>>() {
@Override
public void handleEvent(GridEvent<BeanModel> be) {
try{
// get column where combo box is, in this case, column 2
if (be.getColIndex == 2) {
BeanModel m = be.getModel();
DataObjectInStore data = be.getBean();
// convert bean model to object if needed before saving to data
ValueObject v = (ValueObject) be.getValue();
data.setComboValue(v);
}
========================================================================================================================================================================================================================================================
我创建了一个CellEditor,它是一个SimpleComboBox对象。看起来它工作正常,但是当我进行grid.getStore().getModels()
并检索数据时,我似乎缺少一个步骤。组合框中的选定值不会保存到存储区。如何将其正确保存到商店?
网格本身非常复杂。我将尝试提供一个简化的版本来做同样的事情。
editor = new CellEditor(comboBox) {
@Override
public Object preProcessValue(Object value) {
if (value == null) {
return null;
}
return comboBox.findModel(null);
}
@Override
public Object postProcessValue(Object value) {
if (value == null) {
return null;
}
SimpleComboBox<BeanModel> bean = (SimpleComboBox<BeanModel>) value;
return bean.getValue().getBean();
}
};
configs.setEditor(editor) // configs = ColumnConfig
cm = new ColumnModel(configs);
grid = new Grid<BeanModel>(cm, store);
网格的存储是 GridDataObject 的 BeanModel,其中包含字符串和 dataObject 等变量。comboBox
是 dataObject 的 BeanModel 的集合。dataObject 具有包含标识数据库中条目的 id 和字符串值的值。
提前谢谢。
我遇到的问题是,当下拉列表完成编辑时,它没有正确读取值,因为它是 beanmodel 中的一个对象,所以我必须添加一个 gridevent 侦听器,每次完成编辑时都会检查并在那时设置正确的值。