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.
*& 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.
相关文章推荐
- Abap/4控制ALV表格(1)
- Abap/4控制ALV表格(2)
- Abap/4控制ALV表格(4)
- Abap/4控制ALV表格(5)
- ABAP 表格控制(Table Control)和 步循环(STEP-LOOP)
- ABAP--SAP是如何控制REUSE_ALV_GRID_DISPLAY函数嵌套调用的返回控制
- Abap/4控制表格控件(1)
- Abap/4控制表格控件(2)
- Abap/4 控制ALV树(1)
- Abap/4 控制ALV树(2)
- abap报表中(ALV或者普通屏幕的定制控制中)如何让列可以使用求和按钮
- ABAP 表格控制(Table Control)和步循环
- Abap/4 控制ALV树(3)
- ABAP 控制ALV单元格编辑后获取新的数值
- ABAP 表格控制(Table Control)和步循环
- CONTROLS: <> TYPE TABLEVIEW USING SCREEN<>.在 ABAP/4 中声明表格 控制
- ABAP的alv控制输入输出到单元格
- ABAP 表格控制(Table Control)和 步循环(STEP-LOOP) . .
- HTML table表格边框的控制详细说明
- 基于Swift的iOS应用程序开发:使用表格显示并控制数据(四):使用UIRefreshController实现下拉刷新