定义 事件 event
DATA:stbl TYPE lvc_s_stbl,
g_grid TYPE REF TO cl_gui_alv_grid,
it_event TYPE slis_t_event. "不能有表头,否则会RUNTIME ERROR
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* 类定义
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION."类定义
PUBLIC SECTION.
METHODS:
handle_data_changed FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
* 类实现
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION."类实现
METHOD handle_data_changed.
PERFORM handle_data_changed ."具体处理数据事件
IF e_modified = 'X'.
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD g_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDIF.
ENDMETHOD.
ENDCLASS. "lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form register_events
*&---------------------------------------------------------------------*
* 注册回车事件
*----------------------------------------------------------------------
FORM frm_register_events USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = g_grid.
*
DATA: gr_event_handler TYPE REF TO lcl_event_handler.
CREATE OBJECT gr_event_handler.
*
CALL METHOD g_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
SET HANDLER gr_event_handler->handle_data_changed FOR g_grid.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "register_events
FORM handle_data_changed . " 回车后操作
……………………
ENDFORM.
*&BEGIN------------------------------------------------------------------*
*& 增加ALV事件
*&创建时间:15.07.2024 10:10:33
*&创建人:
*&END--------------------------------------------------------------------*
FORM frm_set_event.
DATA ls_event TYPE slis_alv_event.
ls_event-name = 'CALLER_EXIT'.
ls_event-form = 'FRM_REGISTER_EVENTS'.
APPEND ls_event TO it_event.
ENDFORM.
ALV展示
FORM frm_display_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = iw_layout
it_fieldcat = it_fieldcat
i_callback_pf_status_set = 'ALV_PF_STATUS'
i_callback_user_command = 'ALV_USER_COMMAND'
it_sort = i_sort[]
it_events = it_event
TABLES
t_outtab = gt_alv[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
调用实现
PERFORM frm_set_event.
PERFORM frm_display_alv.