ALV双击事件
*&---------------------------------------------------------------------*
*& Report ZTEST32
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST32.
*功能码返回值
DATA: OK_CODE TYPE SY-UCOMM,
SAVE_OK TYPE SY-UCOMM.
TABLES SPFLI.
DATA LS_SPFLI TYPE SPFLI.
*定义内表,变量需要传递,不加HEADER LINE
DATA WA_SPFLI TYPE TABLE OF SPFLI.
DATA WADEL_SPFLI TYPE TABLE OF SPFLI.
*内表赋值
SELECT * INTO TABLE WA_SPFLI FROM SPFLI.
*定义窗口定制控制,定义ALV对象
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
*---------------------------------------------------------- *定义事件的属性和方法
*---------------------------------------------------------- CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
TYPES: DEL_ROWS TYPE STANDARD TABLE OF SPFLI.
DATA: DDEL_ROWS TYPE STANDARD TABLE OF SPFLI.
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.
* METHODS:
* HANDLE_DOUBLE_CLICK
* FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
* IMPORTING E_ROW E_COLUMN.
ENDCLASS.
*--------------------------------------------------------------- *CLASS LCL_EVENT_RECEIVER IMPLENTATION
*--------------------------------------------------------------- *
*---------------------------------------------------------------
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_SPFLI INTO LS_SPFLI INDEX L_DEL_ROW-ROW_ID.
IF SY-SUBRC NE 0.
MESSAGE E208(00) WITH '处理错误'.
ELSE.
APPEND LS_SPFLI TO DDEL_ROWS.
ENDIF.
ENDLOOP.
ENDMETHOD. "update_delta_tables
METHOD GET_DELETED_ROWS.
DELETED_ROWS = ME->DDEL_ROWS.
ENDMETHOD. "get_deleted_rows
* METHOD HANDLE_DOUBLE_CLICK.
* DATA: LI_SPFLI LIKE LINE OF WA_SPFLI. * READ TABLE WA_SPFLI INDEX E_ROW-INDEX INTO LI_SPFLI. *将行列等信息合并到字符串
* DATA: S1(100) TYPE C.
* CONCATENATE '行:' E_ROW-INDEX '列名:' E_COLUMN-FIELDNAME INTO S1. * CONCATENATE S1 ' connid:' LI_SPFLI-CONNID INTO S1. * CONCATENATE S1 ' carrid:' LI_SPFLI-CARRID INTO S1. *在状态条显示双击的行和列信息
* MESSAGE I005(YMESS) WITH S1.
* ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CALL SCREEN 100.
WRITE / '删除的内表记录'.
WRITE / '______________'.
CALL METHOD EVENT_RECEIVER->GET_DELETED_ROWS
IMPORTING
DELETED_ROWS = WADEL_SPFLI.
LOOP AT WADEL_SPFLI INTO SPFLI.
WRITE: / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM.
ENDLOOP.
WRITE: / '更新后的内表记录:'.
WRITE: / '_________________'.
LOOP AT WA_SPFLI INTO SPFLI.
WRITE: / SPFLI-CARRID,SPFLI-CONNID,SPFLI-CITYFROM.
ENDLOOP.
END-OF-SELECTION.
*&---------------------------------------------------------------------* *& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------* MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS1'.
* SET TITLEBAR 'xxx'.
*如果窗口还没有创建ALV对象则创建它
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 = 'SPFLI'
IS_LAYOUT = WA_LAYOUT
CHANGING
IT_OUTTAB = WA_SPFLI.
*ALV对象分配双击事件
* CREATE OBJECT EVENT_RECEIVER.
* SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK * FOR ALV_GRID.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------* * text
*----------------------------------------------------------------------* MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'EXIT'.
DATA L_RET VALUE 'X'.
CALL METHOD ALV_GRID->CHECK_CHANGED_DATA
IMPORTING
E_VALID = L_RET.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT