回車(chē)低矮、雙擊、數(shù)據(jù)更改曹仗、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.
"回車(chē)
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'." 基于行的穩(wěn)定刷新
STBL-COL = 'X'." 基于列穩(wěn)定刷新
CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL.
ENDIF.
ENDMETHOD.
*--DATA_CHANGED_FINISHED(ENTER)
METHOD handle_enter.
PERFORM frm_handle_enter.."直接寫(xiě)代碼
ENDMETHOD.
*--Double Click
METHOD handle_double_click.
PERFORM frm_display_message."直接寫(xiě)代碼
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."光標(biāo)移動(dòng)觸發(fā)
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'. " 根據(jù)原因分析類型的變化提取對(duì)應(yīng)的描述
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.“更改過(guò)的值
ENDLOOP.
ENDIF.
ENDCASE.
ENDLOOP.
CALL METHOD cl_ref_grid->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDFORM.