ABAP ALV控制元件的使用
阿新 • • 發佈:2019-01-01
輸出結果:REPORT YTEST20160620004. DATA:OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM. TABLES YTJAYSCHOOL. DATA LS_SCHOOL TYPE YTJAYSCHOOL. DATA WA_SCHOOL TYPE TABLE OF YTJAYSCHOOL. DATA WADEL_SCHOOL TYPE TABLE OF YTJAYSCHOOL. SELECT * INTO TABLE WA_SCHOOL FROM YTJAYSCHOOL. DATA:WA_CONTAINER TYPE SCRFNAME VALUE 'ALVDATA', ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER. DATA WA_LAYOUT TYPE LVC_S_LAYO. WA_LAYOUT-EDIT = 'X'. CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED. DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER. CLASS LCL_EVENT_RECEIVER DEFINITION. PUBLIC SECTION. TYPES: DEL_ROWS TYPE STANDARD TABLE OF YTJAYSCHOOL. DATA: DDEL_ROWS TYPE STANDARD TABLE OF YTJAYSCHOOL. METHODS: HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID IMPORTING ER_DATA_CHANGED. METHODS: UPDATE_DELTA_TABLES IMPORTING PR_DATA_CHANGED TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL. METHODS: GET_DELETED_ROWS EXPORTING DELETED_ROWS TYPE DEL_ROWS. ENDCLASS. CLASS LCL_EVENT_RECEIVER IMPLEMENTATION. METHOD HANDLE_DATA_CHANGED. CALL METHOD UPDATE_DELTA_TABLES( ER_DATA_CHANGED ). ENDMETHOD. METHOD UPDATE_DELTA_TABLES. DATA: L_DEL_ROW TYPE LVC_S_MOCE. LOOP AT PR_DATA_CHANGED->MT_DELETED_ROWS INTO L_DEL_ROW. READ TABLE WA_SCHOOL INTO LS_SCHOOL INDEX L_DEL_ROW-ROW_ID. IF SY-SUBRC NE 0. MESSAGE E208(00) WITH '處理錯誤'. ELSE. APPEND LS_SCHOOL TO DDEL_ROWS. ENDIF. ENDLOOP. ENDMETHOD. METHOD GET_DELETED_ROWS. DELETED_ROWS = ME->DDEL_ROWS. ENDMETHOD. ENDCLASS. START-OF-SELECTION. CALL SCREEN 100. WRITE / '---------------刪除的內表記錄---------------'. WRITE / '____________________________________________'. CALL METHOD EVENT_RECEIVER->GET_DELETED_ROWS IMPORTING DELETED_ROWS = WADEL_SCHOOL. LOOP AT WADEL_SCHOOL INTO YTJAYSCHOOL. WRITE:/ YTJAYSCHOOL-YSH_ID,YTJAYSCHOOL-YSH_NAME,YTJAYSCHOOL-YSH_ADDR. ENDLOOP. WRITE:/ '---------------更新後的內表記錄---------------:'. WRITE:/ '____________________________________________'. LOOP AT WA_SCHOOL INTO YTJAYSCHOOL. WRITE:/ YTJAYSCHOOL-YSH_ID,YTJAYSCHOOL-YSH_NAME,YTJAYSCHOOL-YSH_ADDR. ENDLOOP. * WHEN 'SAVE'. * MODIFY YTJAYSCHOOL FROM TABLE WA_SCHOOL. * IF SY-SUBRC NE 0. * MESSAGE I005(YMESS) WITH '更新資料錯誤'. * EXIT. * ELSE. * MESSAGE I005(YMESS) WITH '更新資料OK'. * ENDIF. * * DELETE YTJAYSCHOOL FROM TABLE DELA_SCHOOL. * IF SY_SUBRC NE 0. * MESSAGE I005(YMESS) WITH '更新資料錯誤'. * ELSE. * MESSAGE I005(YMESS) WITH '更新資料OK'. * ENDIF. END-OF-SELECTION. MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'STATUS1'. IF WA_CUSTOM_CONTAINER IS INITIAL. CREATE OBJECT WA_CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = WA_CONTAINER. CREATE OBJECT ALV_GRID EXPORTING I_PARENT = WA_CUSTOM_CONTAINER. CREATE OBJECT EVENT_RECEIVER. SET HANDLER EVENT_RECEIVER->HANDLE_DATA_CHANGED FOR ALV_GRID. CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = 'YTJAYSCHOOL' IS_LAYOUT = WA_LAYOUT CHANGING IT_OUTTAB = WA_SCHOOL. ENDIF. ENDMODULE. MODULE USER_COMMAND_0100 INPUT. SAVE_OK = OK_CODE. CLEAR OK_CODE. CASE SAVE_OK. WHEN 'CANCEL'. DATA L_RET VALUE 'X'. CALL METHOD ALV_GRID->CHECK_CHANGED_DATA IMPORTING E_VALID = L_RET. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE.