ALV Grid не обновляется - PullRequest
       108

ALV Grid не обновляется

0 голосов
/ 29 декабря 2018

У меня есть два экрана (экран A и экран B) в моей программе пула модулей.Экран A отображает сетку ALV и имеет 1 кнопку на панели инструментов, а экран B также отображает сетку ALV и кнопку 1 на панели инструментов.
Когда я нажимаю кнопку «Показать заказы» на экране A, меня направляют на экран B.Затем я делаю некоторые операции редактирования на экране B, нажимаю кнопку «Сохранить» на панели инструментов и затем кнопку «Назад».Когда я нажимаю кнопку «Показать заказы» на экране A для другой строки, меня снова направляют на экран B, но в сетке ALV все еще отображаются данные из первого материала, то есть не отображаются новые данные, но отображаются старые данные.,Это как-то связано с методом cl_gui_cfw => flush?Если да, то где именно в коде я должен вызывать его для отображения правильных данных?

PBO модуль экрана B.

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 ).

PAI модуль экрана B.

zclmz_pp_md_create=>go_alv_charg->refresh_table_display( EXPORTING is_stable = ls_stable ).

CALL METHOD cl_gui_cfw=>flush.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Это хорошо известная проблема с элементами управления.Если вы создаете экземпляр элемента управления (вашего ALV) внутри контейнера, в котором уже был элемент управления, который не был освобожден, то старый элемент управления по-прежнему отображается.

Два решения:

  • Либо вы продолжаете создавать экземпляр элемента управления, но затем вы должны освободить предыдущий элемент управления.Для этого вы должны использовать метод FREE, который доступен для всех видов элементов управления (даже сам контейнер может быть освобожден, после чего все его внутренние элементы управления освобождаются).

  • Иливы изменяете логику, создавая экземпляр элемента управления только один раз, и обновляете его содержимое, как сказала Лорен.

(проблема, кстати, не связана с cl_gui_cfw => flush)

0 голосов
/ 29 декабря 2018

Метод refresh_table_display должен вызываться в PBO экрана B, а не в 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.
...