ALV不能直接在GUI 狀態里響應回車事件,需要自己定義,寫代碼。
REUSE_ALV_GRID_DISPLAY_LVC.png
data定義:
DATA:GT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA STBL TYPE LVC_S_STBL.
DATA: REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
選擇屏幕前寫:
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 GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .
定義一個方法
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
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.
ENDCLASS.
在調ALV展示之前寫一個單獨的perform,類似layout 的 perform中寫:
DATA: I_GRID_SETTINGS TYPE LVC_S_GLAY.
GT_EVENT-NAME = 'CALLER_EXIT'.
GT_EVENT-FORM = 'FM_BUTTON'.
APPEND GT_EVENT.
*&---------------------------------------------------------------------*
*& FRM_BUTTON
*&---------------------------------------------------------------------*
* ALV輸出
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
* 設置enter事件
CALL METHOD 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_MODIFY FOR REF_GRID.
ENDFORM.