记录一下,方便后续查找。 FM ALV启用EVENTS参数 设置监听事件
首先LAYOUT设置里面设置 字段SEL 为CHECKBOX EDIT = 'X' CHECKBOX = 'X'
REUSE_ALV_GRID_DISPLAY_LVC 函数 启用IT_EVENTS参数
wa_events-name = 'CALLER_EXIT'.
wa_events-form = 'FRM_DATA_CHANGED'. “这个需要在程序中自己创建数据更改FORM
APPEND wa_events TO i_events.
设置事件两个事件 放在抬头定义
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified
et_good_cells.
ENDCLASS.
DATA: g_event_handler TYPE REF TO lcl_event_receiver.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
PERFORM frm_handle_changed_finished USING e_modified et_good_cells.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS.
设置数据变更事件
FORM frm_data_changed USING i_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = o_grid.
* 设置enter事件
CALL METHOD o_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
CALL METHOD o_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
CREATE OBJECT g_event_handler.
SET HANDLER g_event_handler->handle_modify FOR o_grid.
ENDFORM. "FRM_DATA_CHANGED
这个FORM 就是具体的内表操作
FORM frm_handle_changed_finished USING i_modified i_good_cells.
DATA: li_modi TYPE lvc_t_modi,
lw_modi TYPE lvc_s_modi.
DATA: lw_stable TYPE lvc_s_stbl,
lw_s_col TYPE lvc_s_col.
CLEAR: lw_stable .
CLEAR li_data.
MOVE i_good_cells TO li_modi.
创建临时表 获取选择的行 再读取ALV内表 根据要同时满足选择的条件 设置SEL 值
刷新ALV
DATA: o_grid TYPE REF TO cl_gui_alv_grid.
lw_stable-row = 'X'.
lw_stable-col = 'X'.
"刷新ALV
CALL METHOD o_grid->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
is_stable = lw_stable.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = o_grid.