我的模块池程序中有两个屏幕(屏幕A和屏幕B)。屏幕A显示ALV网格,工具栏上有1个按钮,屏幕B也显示ALV网格和工具栏上的1个按钮。
当我按下屏幕A上的“显示订单”按钮时,我被指向屏幕B。然后在屏幕B上执行一些编辑操作,然后单击工具栏上的“保存”按钮,然后单击“后退”按钮。
当我按下屏幕A上另一行的“显示订单”按钮时,我再次被定向到屏幕B,但是ALV网格仍然显示来自第一个材料的数据,即它不显示新数据,而是显示旧数据。
它是否与cl_gui_cfw=>flush方法有关?如果是,那么代码中的确切位置应该调用它以显示正确的数据?
屏幕B的PBO模块。
CREATE OBJECT zclmz_pp_md_create=>go_container_charg
EXPORTING
parent = cl_gui_container=>screen0
side = cl_gui_docking_container=>dock_at_top
extension = 800.
CREATE OBJECT zclmz_pp_md_create=>go_alv_charg
EXPORTING
i_parent = zclmz_pp_md_create=>go_container_charg.
zclmz_pp_md_create=>go_alv_charg->set_table_for_first_display( EXPORTING
is_layout = ls_layout CHANGING it_outtab = zclmz_pp_md_create=>gs_plz-
charg it_fieldcatalog = lt_fieldcat ).屏幕B的PAI模块。
zclmz_pp_md_create=>go_alv_charg->refresh_table_display( EXPORTING is_stable = ls_stable ).
CALL METHOD cl_gui_cfw=>flush.发布于 2018-12-29 12:55:13
方法refresh_table_display应该在屏幕B的PBO中调用,而不是在PAI中调用。
IF zclmz_pp_md_create=>go_alv_charg is NOT BOUND.
CREATE OBJECT zclmz_pp_md_create=>go_container_charg
EXPORTING
parent = cl_gui_container=>screen0
side = cl_gui_docking_container=>dock_at_top
extension = 800.
CREATE OBJECT zclmz_pp_md_create=>go_alv_charg
EXPORTING
i_parent = zclmz_pp_md_create=>go_container_charg.
zclmz_pp_md_create=>go_alv_charg->set_table_for_first_display( EXPORTING
is_layout = ls_layout CHANGING it_outtab = zclmz_pp_md_create=>gs_plz-
charg it_fieldcatalog = lt_fieldcat ).
ELSE.
zclmz_pp_md_create=>go_alv_charg->refresh_table_display( ).
ENDIF.发布于 2018-12-29 13:09:51
这是一个众所周知的控制问题。如果您在容器中实例化了一个控件( ALV),其中已经有一个尚未释放的控件,那么旧的控件仍然会出现。
有两种解决办法:
(顺便说一下,这个问题与cl_gui_cfw=>flush无关)
还请参阅另一个answer。
https://stackoverflow.com/questions/53968887
复制相似问题