[英]ALV Grid is not refreshed
我的模塊池程序中有兩個屏幕(屏幕 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.
方法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.
這是一個眾所周知的控件問題。 如果您在容器中實例化一個控件(您的 ALV),其中已經有一個尚未釋放的控件,那么舊控件仍會顯示。
兩種解決方案:
要么繼續實例化控件,但隨后必須釋放以前的控件。 為此,您必須使用 FREE 方法,該方法可用於所有類型的控件(甚至容器本身可以被釋放,然后釋放其所有內部控件)。
或者,您只需將控件實例化一次即可更改邏輯,然后刷新其內容,就像 Laurens 所說的那樣。
(順便說一下,問題與 cl_gui_cfw=>flush 無關)
另請參閱此其他答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.