*&---------------------------------------------------------------------*
*& Form SYN_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM SYN_DATA .
DATA: REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA: LIW_LAYOUT TYPE LVC_S_LAYO,
LIT_FIELDCAT TYPE LVC_T_FCAT,
LIW_FIELDCAT TYPE LVC_S_FCAT.
** 刷新显示
IF NOT IT_TAB IS INITIAL.
* 取得当前alv的grid和fieldcat
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID
ET_FIELDCAT_LVC = LIT_FIELDCAT.
* 更新数据到内表
CALL METHOD REF_GRID->CHECK_CHANGED_DATA.
* 更改fieldcat
READ TABLE LIT_FIELDCAT INTO LIW_FIELDCAT INDEX 1.
LIW_FIELDCAT-CHECKBOX = SPACE.
LIW_FIELDCAT-EDIT = SPACE.
MODIFY LIT_FIELDCAT FROM LIW_FIELDCAT INDEX 1.
* 重新显示alv
CALL METHOD REF_GRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = LIT_FIELDCAT.
ENDIF.
ENDFORM. " SYN_DATA
当使用oo对象时,要用到下头的方法来同步alv 的数据。
方法一:
CASE sy-ucomm.
WHEN 'SAVE'. "when you click save button the records in db table are being updated
"so include this code under it only so the ALV output is refreshed
* to reflect the data changed into internal table
DATA : ref_grid TYPE REF TO cl_gui_alv_grid. "new
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data.
ENDIF.
* refresh the ALV Grid output from internal table
l_selfield-refresh = c_check.
ENDCASE.
方法二:
CALL METHOD grid1->refresh_table_display.