TYPES:
BEGIN OF TY_DATA
SEL(1),
B,
C,
END OF TY_DATA.
DATA: LT_DATA TYPE TABLE OF TY_DATA,
L_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
L_ALV_LAYOUT-BOX_FIELDNAME = 'SEL'.
FORM ALV_USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
DATA:REF1 TYPE REF TO CL_GUI_ALV_GRID,
LT_ROWS TYPE LVC_T_ROW,
LS_ROWS TYPE LINE OF LVC_T_ROW,
LT_DATA LIKE TABLE OF IT_DATA,
LS_DATA LIKE LINE OF IT_DATA.
CASE UCOMM.
WHEN 'RNT'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF1.
CLEAR: LS_ROWS,WA_DATA.
REFRESH: LT_ROWS,LT_DATA.
CALL METHOD REF1->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_ROWS.
IF LT_ROWS IS NOT INITIAL.
LOOP AT LT_ROWS INTO LS_ROWS.
CLEAR WA_DATA.
READ TABLE IT_DATA INTO WA_DATA INDEX LS_ROWS.
IF SY-SUBRC EQ 0.
IF WA_DATA IS NOT INITIAL.
APPEND WA_DATA TO LT_DATA.
ENDIF.
ENDIF.
ENDLOOP.
"SORT LT_DATA BY INVNO.
"DELETE ADJACENT DUPLICATES FROM LT_DATA COMPARING INVNO."avoid printing several times if there are many items
PERFORM _PRINT_DATA TABLES LT_DATA.
CLEAR: LS_ROWS,WA_DATA.
FREE: LT_ROWS,LT_DATA.
ENDIF.
ENDCASE.
ENDFORM. "alv_user_command
...
...
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IS_LAYOUT = L_ALV_LAYOUT
CLEAR L_ALV_LAYOUT.
L_ALV_LAYOUT-DETAIL_POPUP = 'X'.
L_ALV_LAYOUT-NO_VLINE = ' '.
L_ALV_LAYOUT-ZEBRA = 'X'.
L_ALV_LAYOUT-DETAIL_INITIAL_LINES = 'X'.
L_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
L_ALV_LAYOUT-ALLOW_SWITCH_TO_LIST = ''.
L_DISVARIANT-REPORT = SY-CPROG.
L_DISVARIANT-USERNAME = SY-UNAME.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = L_IT_ET_EVENTS.
READ TABLE L_IT_ET_EVENTS
WITH KEY NAME = SLIS_EV_USER_COMMAND
INTO L_WA_ET_EVENTS.
IF SY-SUBRC = 0.
L_WA_ET_EVENTS-FORM = 'USER_COMMAND'.
APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.
ENDIF.
READ TABLE L_IT_ET_EVENTS
WITH KEY NAME = SLIS_EV_PF_STATUS_SET
INTO L_WA_ET_EVENTS.
IF SY-SUBRC = 0.
L_WA_ET_EVENTS-FORM = 'STATUS'.
APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.
ENDIF.
L_WA_ET_EVENTS-NAME = 'CALLER_EXIT'.
L_WA_ET_EVENTS-FORM = 'FM_BUTTON'.
APPEND L_WA_ET_EVENTS TO L_IT_ET_EVENTS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_EVENTS = L_IT_ET_EVENTS
IS_LAYOUT = L_ALV_LAYOUT
IT_FIELDCAT = G_IT_ALV_FIELDCAT
IS_VARIANT = L_DISVARIANT
TABLES
T_OUTTAB = LT_DATA
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.
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_MODIFY.
DATA: STBL TYPE LVC_S_STBL,
L_INT TYPE STRING.
CHECK G_IT_DATA[] <> GT_DATA_OLD[] AND SY-UCOMM NE '&DATA_SAVE'.
LOOP AT G_IT_DATA ASSIGNING <L_DATA>.
ENDLOOP.
* 稳定刷新
STBL-ROW = 'X'." 基于行的稳定刷新
STBL-COL = 'X'." 基于列稳定刷新
CALL METHOD TEM_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS.