ALV繫結事件
修改欄位BB的內容,回車後修改CC的值
步驟:
1、定義類lcl_event_handler、定義方法用於實現類CL_GUI_ALV_GRID的事件DATA_CHANGED_FINISHED,實現類、方法;
2、呼叫函式 REUSE_ALV_GRID_DISPLAY_LVC時,給事件CALLER_EXIT新增FORM子程式;
3、在事件CALLER_EXIT的FORM子程式中獲取ALV物件、註冊回車事件、建立類lcl_event_handler物件
CREATE OBJECT gr_event_receiver、註冊事件SET HANDLER g_event_receiver->handle_modify FOR gr_grid.
TYPE-POOLS: slis.
TYPES: BEGIN OF typ_itab,
aa TYPE c,
bb TYPE i,
cc TYPE i,
END OF typ_itab.
DATA: gt_itab TYPE TABLE OF typ_itab WITH HEADER LINE,
wa_tab TYPE typ_itab,
gt_fieldcat TYPE lvc_t_fcat,
wa_layout TYPE lvc_s_layo,
gt_event TYPE slis_t_event WITH HEADER LINE,
gr_grid TYPE REF TO cl_gui_alv_grid.
CLASS: lcl_event_handler DEFINITION DEFERRED.
DATA: gr_event_receiver TYPE REF TO lcl_event_handler.
----------------------------------------------------------------------
-
CLASS lcl_event_handler DEFINITION
----------------------------------------------------------------------
*
----------------------------------------------------------------------
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_modify 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_modify.
DATA: ls_stbl TYPE lvc_s_stbl.
LOOP AT gt_itab INTO wa_tab.
wa_tab-cc = wa_tab-bb * 2 .
MODIFY gt_itab FROM wa_tab TRANSPORTING cc.
ENDLOOP.
ls_stbl = 'XX'.
CALL METHOD gr_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "lcl_event_handler IMPLEMENTATION
START-OF-SELECTION.
**–取數
PERFORM frm_fetch_data.
**–輸出列欄位設定
PERFORM frm_set_fieldcat.
**–輸出列欄位屬性設定
PERFORM frm_set_fieldcat_attribute.
**–ALV顯示
PERFORM frm_display_alv.
&---------------------------------------------------------------------
*& Form FRM_FETCH_DATA
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
- –> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_fetch_data .
gt_itab-aa = ‘aa’.
gt_itab-bb = 1.
gt_itab-cc = 3.
APPEND gt_itab.
ENDFORM. " FRM_FETCH_DATA
&---------------------------------------------------------------------
*& Form FRM_SET_FIELDCAT
&--------------------------------------------------------------------- -
text
----------------------------------------------------------------------
- –> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_set_fieldcat .
DATA: ls_fieldcat TYPE lvc_s_fcat.
DEFINE fieldcat.
ls_fieldcat-col_pos = &1.
ls_fieldcat-fieldname = &2.
ls_fieldcat-scrtext_l = &3.
ls_fieldcat-checkbox = &4.
ls_fieldcat-edit = &5.
ls_fieldcat-decimals = &6.
append ls_fieldcat to gt_fieldcat.
clear ls_fieldcat.
END-OF-DEFINITION.
fieldcat ‘1’ ‘AA’ ‘AA’ ‘’ ‘’ ‘’.
fieldcat ‘2’ ‘BB’ ‘BB’ ‘’ ‘X’ ‘’.
fieldcat ‘3’ ‘CC’ ‘CC’ ‘’ ‘’ ‘0’.
ENDFORM. " FRM_SET_FIELDCAT
&---------------------------------------------------------------------
*& Form FRM_SET_FIELDCAT_ATTRIBUTE
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
- –> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_set_fieldcat_attribute .
ENDFORM. " FRM_SET_FIELDCAT_ATTRIBUTE
&---------------------------------------------------------------------
*& Form FRM_DISPLAY_ALV
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
- –> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_display_alv .
gt_event-name = ‘CALLER_EXIT’. "slis_ev_caller_exit_at_start事件
gt_event-form = ‘FRM_CALLER_EXIT’.
APPEND gt_event.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-repid
it_fieldcat_lvc = gt_fieldcat[]
it_events = gt_event[]
TABLES
t_outtab = gt_itab.
ENDFORM. " FRM_DISPLAY_ALV
&---------------------------------------------------------------------
*& Form FRM_CALLER_EXIT
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
-
-->E_GRID text
----------------------------------------------------------------------
FORM frm_caller_exit USING ir_grid TYPE slis_data_caller_exit.
CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = gr_grid.
"—註冊回車事件
CALL METHOD gr_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
CREATE OBJECT g_event_receiver.
SET HANDLER g_event_receiver->handle_modify FOR gr_grid.
ENDFORM.