2012-05-18 66 views
0

最终的解决方案看起来是这样的:CellEditor的SimpleComboBox <BeanModel>将数据保存到存储

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,其中包含字符串和数据对象等变量。 comboBox是dataObject的BeanModel的集合。 dataObject的值包含标识数据库中条目的id和stringvalue。

在此先感谢。

+0

如果您发布了一些代码,可能对我们有帮助。最好是一个简短,可编译和展示你的问题(见[sscce.org](http://www.sscce.org)) – Attila

回答

0

我遇到的问题是,当下拉菜单完成编辑时,它并没有读取正确的值,因为它是一个bean模式内的对象,所以我不得不添加一个gridevent侦听器来检查每次编辑完成并在那个时候设置正确的值。

+0

HI harmlessdragon,我面临同样的问题,你能告诉我一段代码,你是如何解决这个问题的。 – Jayesh

+0

更新我的帖子,希望它有帮助。 – rcheuk

+0

嗨harmlessdragon,感谢编辑,但后来我找到了解决方案,它现在正在工作。这是有益的...谢谢 – Jayesh