您的位置:首页 > 其它

Abap/4控制ALV表格(3)

2012-05-26 13:19 162 查看
*&---------------------------------------------------------------------*

*& Report Z_CPT9_3 *

*& *

*&---------------------------------------------------------------------*

*1 在屏幕上使用ALV控件

*2 在ALV控件上添加自己的按钮

*3 为添加的按钮赋予行选择事件

*4 双击事件

*&---------------------------------------------------------------------*

REPORT Z_CPT9_3 .

INCLUDE <ICON>.



START-OF-SELECTION.

DATA: OK_CODE TYPE SY-UCOMM,

S***E_OK TYPE SY-UCOMM.

DATA: WA_SPFLI TYPE TABLE OF SPFLI,

A_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.

*定义ALV控件类型

DATA:WA_CONTAINER TYPE SCRFNAME VALUE 'CONTAINER1',

ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,

WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

"这行是声明

CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.

DATA:EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.

"执行代码

SELECT * FROM SPFLI INTO TABLE WA_SPFLI.

CALL SCREEN 100.



"类定义

CLASS LCL_EVENT_RECEIVER DEFINITION.

PUBLIC SECTION.

METHODS:

HANDLE_TOOLBAR

FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID

IMPORTING E_OBJECT E_INTERACTIVE,

HANDLE_USER_COMMAND

FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID

IMPORTING E_UCOMM,

HANDLE_DOUBLE_CLICK

FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW E_COLUMN.

ENDCLASS.

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

"PUBLIC SECTION.

METHOD HANDLE_TOOLBAR.

"创建一个按钮

DATA:LS_TOOLBAR TYPE STB_BUTTON.

* CLEAR LS_TOOLBAR-BUTN_TYPE.

* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

* CLEAR LS_TOOLBAR.

MOVE 'SHOW_DETA' TO LS_TOOLBAR-FUNCTION.

MOVE ICON_PPE_VNODE TO LS_TOOLBAR-ICON.

MOVE '航班明细显示' TO LS_TOOLBAR-QUICKINFO.

MOVE '航班明细显示'(112) TO LS_TOOLBAR-TEXT.

MOVE '' TO LS_TOOLBAR-DISABLED.

APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

ENDMETHOD.

METHOD HANDLE_USER_COMMAND.

DATA: LT_ROWS TYPE LVC_T_ROW.

CASE E_UCOMM.

WHEN 'SHOW_DETA'.

"获取被选择的行

CALL METHOD ALV_GRID->GET_SELECTED_ROWS

IMPORTING

ET_INDEX_ROWS = LT_ROWS.

"这行代码是干啥用的?

CALL METHOD CL_GUI_CFW=>FLUSH.

IF SY-SUBRC = 0.

MESSAGE s003(YMESS) WITH '已选择行!'.

PERFORM MESSDETA TABLES LT_ROWS.

ENDIF.

ENDCASE.

ENDMETHOD.

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 S208(00) WITH S1.

MESSAGE i003(YMESS) WITH S1.

ENDMETHOD.

ENDCLASS.



*&---------------------------------------------------------------------*

*& Module STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

MODULE STATUS_0100 OUTPUT.

* SET PF-STATUS 'xxxxxxxx'.

* 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.

CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

I_STRUCTURE_NAME = 'SPFLI'

CHANGING

IT_OUTTAB = WA_SPFLI.

CREATE OBJECT EVENT_RECEIVER.

SET HANDLER EVENT_RECEIVER->HANDLE_USER_COMMAND FOR ALV_GRID.

SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR FOR ALV_GRID.

SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID.

CALL METHOD ALV_GRID->SET_TOOLBAR_INTERACTIVE.

ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*

*& Module USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

MODULE USER_COMMAND_0100 INPUT.

ENDMODULE. " USER_COMMAND_0100 INPUT

*&---------------------------------------------------------------------*

*& Module CANCEL INPUT

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

MODULE CANCEL INPUT.

LE***E PROGRAM.

ENDMODULE. " CANCEL INPUT

FORM MESSDETA TABLES P_ET_INDEX_ROWS STRUCTURE LVC_S_ROW.

DATA:LS_SELECTED_LINE LIKE LVC_S_ROW,

LF_ROW_INDEX TYPE LVC_INDEX.

DATA:S1(200) TYPE C,

S2(3) TYPE C.

S2 = '-'.

LOOP AT P_ET_INDEX_ROWS INTO LS_SELECTED_LINE.

LF_ROW_INDEX = LS_SELECTED_LINE-INDEX.

READ TABLE WA_SPFLI INDEX LF_ROW_INDEX INTO A_SPFLI.

S1 = '选择行内容'.

CONCATENATE S1

A_SPFLI-CONNID

A_SPFLI-CARRID

A_SPFLI-CITYFROM

INTO S1 SEPARATED BY S2.

MESSAGE i003(YMESS) WITH S1.

ENDLOOP.

ENDFORM.















*子屏幕100的逻辑流代码

PROCESS BEFORE OUTPUT.

MODULE STATUS_0100.

*

PROCESS AFTER INPUT.

MODULE USER_COMMAND_0100.

MODULE CANCEL AT EXIT-COMMAND.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: