请问如何实现在StandardEditor界面里的子表格数据不直接删除?

我在一个主表的一条数据的StandardEditor界面(Master界面)里放了一个table用于编辑其对应的子表数据。通过设置父容器上下文。可以实现在字表上点击添加、修改按钮后填入的数据随着主数据一起保存(按Master界面的确定按钮)。但是发现点表格上的删除按钮的时候直接把字表数据删除了,并不需要等到主数据保存(按Master界面的确定按钮)。请问有没有办法让删除动作也随着用户点Master界面的确定按钮才生效(如果点取消就不生效)。谢谢!

数据的关联方式有两种:组合和关联。 如果想实现你说的这种管理模式,应该用 Composition。如果是用 Association,那么子实体的增删改查与父实体的提交无关。

就说界面上是无法实现批量提交的是吧。

不知道你说的批量提交是什么意思?在你的父实体中给子实体列表的那个属性改为 Composition 就可以实现你要的功能: 删除动作也随着用户点Master界面的确定按钮才生效(如果点取消就不生效)

我理解就是个界面的操作行为,一个A表的一条数据的详情及其和这条数据相关的B表的一批数据想同时提交。这非要通过在实体关系上定义 Composition才行吗?我在A对象上没有定义List<B>的属性。我是自己加载的数据。

我理解的是这一个Screen对应着一个数据上下文DataContext。然后这界面的两个DC(一个Instance一个Collections)数据修改后,最后随上下文一起提交。传统编程就是一个事务提交。现在可以实现Collections的新增和修改随数据上下文提交,但是删除是独立的。有没有办法让删除也进入一个事务。

这种情况需要你自己管理数据的提交了,将数据的删除和新增都添加到界面的 data context 中,在界面的 close 事件中一起提交。如果用标准的 remove action,是会直接删除数据的。

您的意思是删除的时候,我先从DC里remove出来,然后我怎么把删除的对象给到数据上下文呢?能不能详细说一下步骤?

数据上下文通过 merge() 方法新增数据,通过 remove() 方法删除数据,dataContex 会保存这些更改,比如:

@Subscribe("clearBtn")
private void onClearBtnClick(Button.ClickEvent event) {
    for (OrderLine orderLine : linesDc.getItems()) {
        dataContext.remove(orderLine);
    }
    linesDc.getMutableItems().clear();
}
1 个赞

谢谢。请问能否通过CollectionContainer获得到DataContext。我现在是在扩展的删除Action里实现这个功能,我想获得到界面的数据上下文,请指点一下?

我自己找到了,谢谢帮助!

 (ScreenData) ReflectionUtils.getFieldValue(target.getFrame().getFrameOwner(),"screenData");