回车、双击、数据更改、button
DATA : gt_events TYPE slis_t_event.
DATA ls_events TYPE slis_alv_event .
"选择屏幕之后
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
"button
METHODS:
handle_button_click
FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id es_row_no.
"data change
METHODS:
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
"data change
METHODS HANDLE_MODIFY
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS.
"回车
METHODS:
handle_enter
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells.
"双击
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no.
ENDCLASS.
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_button_click.
PERFORM button_click USING es_col_id es_row_no.
ENDMETHOD.
METHOD handle_data_changed.
PERFORM frm_handle_data_changed CHANGING er_data_changed.
ENDMETHOD. "HANDLE_CHANGED_DATA
METHOD HANDLE_MODIFY.
LOOP AT IT_TAB INTO WA_TAB .
*要处理的逻辑*
MODIFY IT_TAB FROM WA_TAB.
ENDLOOP.
IF E_MODIFIED = 'X'.
STBL-ROW = 'X'." 基于行的稳定刷新
STBL-COL = 'X'." 基于列稳定刷新
CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL.
ENDIF.
ENDMETHOD.
*--DATA_CHANGED_FINISHED(ENTER)
METHOD handle_enter.
PERFORM frm_handle_enter.."直接写代码
ENDMETHOD.
*--Double Click
METHOD handle_double_click.
PERFORM frm_display_message."直接写代码
ENDMETHOD.
ENDCLASS.
ls_events-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
ls_events-form = 'DATA_CHANGE'.
APPEND ls_events TO gt_events.
FORM data_change USING e_grid TYPE slis_data_caller_exit .
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = cl_ref_grid.
* Set data changed evententer
CALL METHOD cl_ref_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
* Set enter event
CALL METHOD cl_ref_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_button_click FOR cl_ref_grid.
SET HANDLER gt_event_receiver->handle_data_changed FOR cl_ref_grid."光标移动触发
SET HANDLER gt_event_receiver->HANDLE_MODIFY FOR cl_ref_grid.
SET HANDLER gt_event_receiver->handle_enter FOR cl_ref_grid.
SET HANDLER gt_event_receiver->handle_double_click FOR cl_ref_grid.
ENDFORM. "FM_BUTTON
FORM button_click USING p_col
p_row TYPE lvc_s_roid.."button
CLEAR gt_mess1.
READ TABLE gt_tab INTO gs_tab INDEX p_row-row_id.
IF sy-subrc = 0.
ENDIF.
ENDFORM.
FORM frm_handle_data_changed CHANGING er_data_changed TYPE REF TO cl_alv_changed_data_protocol..
FIELD-SYMBOLS: <f_so> LIKE LINE OF gt_so.
DATA: ls_mod_cell TYPE lvc_s_modi.
IF er_data_changed->mt_mod_cells IS NOT INITIAL.
LOOP AT er_data_changed->mt_mod_cells INTO ls_mod_cell.
CASE ls_mod_cell-fieldname .
WHEN 'OLFMNG'. " 根据原因分析类型的变化提取对应的描述
READ TABLE gt_so INTO gs_so INDEX ls_mod_cell-row_id .
IF sy-subrc = 0.
LOOP AT gt_so ASSIGNING <f_so> WHERE vbeln = gs_so-vbeln AND uepos = gs_so-posnr.
<f_so>-olfmng = ls_mod_cell-value.“更改过的值
ENDLOOP.
ENDIF.
ENDCASE.
ENDLOOP.
CALL METHOD cl_ref_grid->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDFORM.
网友评论