A simple Editable ALV program
REPORT ZJPM_MS.
TABLES: ZSCE_TRUCKS .
TYPE-POOLS: SLIS.
DATA: BEGIN OF WA_ITAB.
INCLUDE STRUCTURE ZSCE_TRUCKS.
DATA: CELLTAB TYPE LVC_T_STYL,
FLAG TYPE CHAR1,
END OF WA_ITAB.
DATA: ITAB LIKE TABLE OF WA_ITAB.
DATA: G_CONTAINER TYPE SCRFNAME VALUE 'GRID_CONTROL',
GRID TYPE REF TO CL_GUI_ALV_GRID,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
LAYOUT TYPE LVC_S_LAYO,
SAVE TYPE CHAR1.
DATA: FCAT TYPE LVC_T_FCAT,
WA_FCAT TYPE LVC_S_FCAT.
DATA: OK_CODE LIKE SY-UCOMM,
OKCODE LIKE SY-UCOMM,
WA_TB TYPE STB_BUTTON.
CLASS ER DEFINITION DEFERRED.
DATA: EVENT_RECEIVER TYPE REF TO ER,
L_EVENT TYPE CNTL_SIMPLE_EVENT.
DATA: LT_SELROW TYPE LVC_T_ROW,
LS_SELROW TYPE LVC_S_ROW,
LS_CELLTAB TYPE LVC_S_STYL,
WA_CELLTAB TYPE LVC_S_STYL.
DATA: LS_TOOLBAR_EXCLUDING TYPE UI_FUNC,
LT_TOOLBAR_EXCLUDING TYPE UI_FUNCTIONS.
DATA: MODE TYPE CHAR1 VALUE 'D'.
*----------------------------------------------------------------------*
* CLASS ER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ER DEFINITION .
PUBLIC SECTION.
CLASS-METHODS:
HANDLE_TB FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
*
HANDLE_UC FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
PRIVATE SECTION.
ENDCLASS. "er DEFINITION
PARAMETERS: P_VSTEL LIKE LIKP-VSTEL.
SELECT-OPTIONS: S_LIFNR FOR ZSCE_TRUCKS-ZLIFNR.
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM ZSCE_TRUCKS CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND ZVSTEL = P_VSTEL
AND ZLIFNR IN S_LIFNR.
PERFORM OUTPUT_ALV.
PERFORM ENABLE_DISABLE USING MODE.
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*& Form OUTPUT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OUTPUT_ALV .
CLEAR LAYOUT.
LAYOUT-ZEBRA = 'X'.
LAYOUT-SEL_MODE = 'A'.
LAYOUT-STYLEFNAME = 'CELLTAB'.
SAVE = 'A'.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE = I_BUFFER_ACTIVE
I_STRUCTURE_NAME = 'ZSCE_TRUCKS'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER = I_BYPASSING_BUFFER
* I_INTERNAL_TABNAME = I_INTERNAL_TABNAME
CHANGING
CT_FIELDCAT = FCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
.
DELETE FCAT WHERE FIELDNAME = 'MANDT'.
LOOP AT FCAT INTO WA_FCAT.
WA_FCAT-EDIT = 'X'.
MODIFY FCAT FROM WA_FCAT.
ENDLOOP.
REFRESH LT_TOOLBAR_EXCLUDING.
APPEND '&LOCAL&DELETE_ROW' TO LT_TOOLBAR_EXCLUDING.
APPEND '&LOCAL&INSERT_ROW' TO LT_TOOLBAR_EXCLUDING.
ENDFORM. " OUTPUT_ALV
*&---------------------------------------------------------------------*
*& Module PBO OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO OUTPUT.
SET PF-STATUS 'MAIN100'.
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = G_CONTAINER.
ENDIF.
IF GRID IS INITIAL.
CREATE OBJECT GRID
EXPORTING
I_PARENT = G_CUSTOM_CONTAINER.
CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = LAYOUT
I_SAVE = SAVE
IT_TOOLBAR_EXCLUDING = LT_TOOLBAR_EXCLUDING
CHANGING
IT_FIELDCATALOG = FCAT
IT_OUTTAB = ITAB.
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER EVENT_RECEIVER->HANDLE_UC
* EVENT_RECEIVER->HANDLE_MB
EVENT_RECEIVER->HANDLE_TB FOR GRID.
CALL METHOD GRID->SET_TOOLBAR_INTERACTIVE.
ELSE.
CALL METHOD GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDMODULE. " PBO OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PAI INPUT.
OKCODE = OK_CODE.
CLEAR OK_CODE.
CASE OKCODE.
WHEN 'EXIT' OR 'BACK' OR 'CANC'.
LEAVE TO SCREEN 000.
WHEN OTHERS.
* do nothing
ENDCASE.
ENDMODULE. " PAI INPUT
*----------------------------------------------------------------------*
* CLASS ER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ER IMPLEMENTATION.
METHOD HANDLE_TB.
CLEAR WA_TB.
MOVE 'ADD' TO WA_TB-FUNCTION.
MOVE ICON_INSERT_ROW TO WA_TB-ICON.
MOVE 'Add Rows' TO WA_TB-QUICKINFO.
MOVE 0 TO WA_TB-BUTN_TYPE.
MOVE SPACE TO WA_TB-DISABLED.
MOVE ' ' TO WA_TB-TEXT.
INSERT WA_TB INTO E_OBJECT->MT_TOOLBAR INDEX 1.
CLEAR WA_TB.
MOVE 'DEL' TO WA_TB-FUNCTION.
MOVE ICON_DELETE_ROW TO WA_TB-ICON.
MOVE 'Delete Rows' TO WA_TB-QUICKINFO.
MOVE 0 TO WA_TB-BUTN_TYPE.
MOVE SPACE TO WA_TB-DISABLED.
MOVE '' TO WA_TB-TEXT.
INSERT WA_TB INTO E_OBJECT->MT_TOOLBAR INDEX 2.
CLEAR WA_TB.
MOVE 'SAVE' TO WA_TB-FUNCTION.
MOVE ICON_SYSTEM_SAVE TO WA_TB-ICON.
MOVE 'Save' TO WA_TB-QUICKINFO.
MOVE 0 TO WA_TB-BUTN_TYPE.
MOVE SPACE TO WA_TB-DISABLED.
* MOVE 'Save Only' TO WA_TB-TEXT.
INSERT WA_TB INTO E_OBJECT->MT_TOOLBAR INDEX 3.
CLEAR WA_TB.
MOVE 'CHAN' TO WA_TB-FUNCTION.
MOVE ICON_TOGGLE_DISPLAY_CHANGE TO WA_TB-ICON.
MOVE 'Change<->Display' TO WA_TB-QUICKINFO.
MOVE 0 TO WA_TB-BUTN_TYPE.
MOVE SPACE TO WA_TB-DISABLED.
* MOVE 'Release' TO WA_TB-TEXT.
INSERT WA_TB INTO E_OBJECT->MT_TOOLBAR INDEX 4.
ENDMETHOD. "HANDLE_TB
METHOD HANDLE_UC.
DATA: PVAL TYPE I.
CALL METHOD CL_GUI_CFW=>FLUSH.
CASE E_UCOMM.
WHEN 'ADD'.
IF MODE = 'D'.
MESSAGE S398(00) WITH 'Cannot add in Display mode'.
EXIT.
ENDIF.
CLEAR WA_ITAB.APPEND WA_ITAB TO ITAB.
WHEN 'DEL' .
CALL METHOD GRID->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_SELROW.
LOOP AT LT_SELROW INTO LS_SELROW.
WA_ITAB-FLAG = 'X'.
MODIFY ITAB FROM WA_ITAB INDEX LS_SELROW-INDEX.
ENDLOOP.
IF SY-SUBRC = 0.
DELETE ITAB WHERE FLAG = 'X'.
ENDIF.
WHEN 'CHAN'.
IF MODE = 'D'.
MODE = 'C'.
ELSE.
MODE = 'D'.
ENDIF.
PERFORM ENABLE_DISABLE USING MODE.
WHEN 'SAVE'.
DELETE ITAB WHERE ZVSTEL IS INITIAL
OR ZLIFNR IS INITIAL.
LOOP AT ITAB INTO WA_ITAB.
ZSCE_TRUCKS-ZVSTEL = WA_ITAB-ZVSTEL.
ZSCE_TRUCKS-ZTRUCK = WA_ITAB-ZTRUCK.
ZSCE_TRUCKS-ZLIFNR = WA_ITAB-ZLIFNR.
ZSCE_TRUCKS-ZNAMTX = WA_ITAB-ZNAMTX.
ZSCE_TRUCKS-ZCAPY = WA_ITAB-ZCAPY.
MODIFY ZSCE_TRUCKS FROM ZSCE_TRUCKS.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE S398(00) WITH 'Records Saved'.
ENDIF.
ENDCASE.
CALL METHOD GRID->REFRESH_TABLE_DISPLAY.
ENDMETHOD. "HANDLE_UC
ENDCLASS. "ER IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form ENABLE_DISABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_MODE text
*----------------------------------------------------------------------*
FORM ENABLE_DISABLE USING P_MODE.
LOOP AT ITAB INTO WA_ITAB.
REFRESH WA_ITAB-CELLTAB.
LOOP AT FCAT INTO WA_FCAT.
LS_CELLTAB-FIELDNAME = WA_FCAT-FIELDNAME.
IF P_MODE = 'D'.
LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
ELSE.
LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.
ENDIF.
INSERT LS_CELLTAB INTO TABLE WA_ITAB-CELLTAB.
ENDLOOP.
MODIFY ITAB FROM WA_ITAB.
ENDLOOP.
ENDFORM. " ENABLE_DISABLE