ALV報表中,可編輯列輸入數據后,回車,后台做相應的數據處理后重新刷新報表顯示,如果可編輯列為P類型,則需要在ALV報表中設置該列的類型,GS_FIELDCAT-DATATYPE = 'P'。
設置回車事件方式如下:
1.設置相關參數
DATA:STBL TYPE LVC_S_STBL, G_GRID TYPE REF TO CL_GUI_ALV_GRID. *** 定義ALV結構及布局 DATA: gt_fieldcat TYPE lvc_t_fcat, gs_fieldcat TYPE lvc_s_fcat, gs_layout TYPE lvc_s_layo, LT_EVENTS TYPE slis_t_event, LS_EVENTS TYPE slis_alv_event. " Alv grid.
2.定義事件所使用的類
*----------------------------------------------------------------------* * 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
3.注冊回車事件及具體處理數據FORM
*&---------------------------------------------------------------------* *& 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.
4.ALV報表增加事件
***ALV布局 gs_layout-zebra = 'X'. gs_layout-cwidth_opt = 'X'. gs_layout-edit = ''. gs_layout-edit_mode = 'X'. gs_layout-sel_mode = 'A'. gs_layout-box_fname = 'BOX'. **增加ALV事件 LS_EVENTS-NAME = 'CALLER_EXIT'. LS_EVENTS-FORM = 'FRM_REGISTER_EVENTS'. APPEND LS_EVENTS TO LT_EVENTS. ***顯示ALV CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS_SET' "用戶自定義GUI狀態 i_callback_user_command = 'USER_COMMAND' "用戶命令 is_layout_lvc = gs_layout it_fieldcat_lvc = gt_fieldcat IT_EVENTS = LT_EVENTS TABLES t_outtab = gt_data EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
