强制OOALV运行数据修改事件

ALV中的数据修改事件,在编辑了某一个字段之后,如果点击了屏幕上不属于alv的部分,那么注册的失去焦点和回车事件(代码如下)是失效的,因为无论是失去焦点还是回车事件都是针对于当前alv的。

CALL METHOD PP_ALV_GRID->REGISTER_EDIT_EVENT "注册更新事件 EXPORTING * I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER . I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED .

比如,当alv编辑了字段,点击了非alv元素的返回按钮,那么最后修改的字段的值是没有更新到展示的内表的,解决这个问题的方法如下,只需要在非alv元素点击事件的代码中加入如下代码:

* to react on custom events:
  CALL METHOD cl_gui_cfw=>dispatch. * force ALV to copy the data from grid to the internal table *(events DATA_CHANGED and DATA_CHANGED_FINISHED) CALL METHOD go_grid->check_changed_data.

这样,即使你没有回车或者点击alv中的元素,直接点击了返回按钮等,也可以把最后编辑的数据更新到内表中。
如果还不能实现你的要求,可能就要考虑使用table control了,以上只是个人见解,如有错误望各位指正!

你可能感兴趣的:(alv数据更改事件,强制执行数据变更,ooalv)