TABLES:sflight.
DATA:BEGIN OF lspfli OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA:color TYPE char10,
END OF lspfli.
DATA:fieldcat TYPE lvc_t_fcat,
grid TYPE REF TO cl_gui_alv_grid,
g_container TYPE scrfname VALUE 'CONT1',
is_layout TYPE lvc_s_layo,
g_custom_container TYPE REF TO cl_gui_custom_container.
DATA:gs_toolbar TYPE stb_button.
CLASS alv_event_receiver DEFINITION DEFERRED."聲明類對象
CLASS alv_event_receiver DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_toolbar "初始化工具欄對象事件,如增加按鈕增加屬性
FOR EVENT toolbar of cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_menu_button"該按鈕適用於在下拉菜單中增加選項
FOR EVENT menu_button of cl_gui_alv_grid
IMPORTING e_object e_ucomm,
handle_user_command"工具欄按鈕的單擊事件
FOR EVENT user_command of cl_gui_alv_grid
IMPORTING e_ucomm,
handle_double_click"ALV表格中的雙擊事件
FOR EVENT double_click of cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
ENDCLASS.
CLASS alv_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
gs_toolbar-function = 'B_SUM'.
gs_toolbar-icon = icon_display.
gs_toolbar-text = '總行數'.
gs_toolbar-butn_type = '0'.
APPEND gs_toolbar TO e_object->mt_toolbar.
gs_toolbar-function = 'B_LIST'.
gs_toolbar-quickinfo = '自定義下拉菜單'.
gs_toolbar-icon = icon_biw_report_view.
gs_toolbar-text = '下拉菜單'.
gs_toolbar-butn_type = '1'.
APPEND gs_toolbar to e_object->mt_toolbar.
ENDMETHOD.
METHOD handle_menu_button.
IF e_ucomm = 'B_LIST'.
CALL METHOD e_object->add_function
EXPORTING
icon = icon_display
fcode = 'B_SUM'
text = '顯示alv總行數'.
ENDIF.
ENDMETHOD.
METHOD handle_user_command.
DATA sum TYPE i.
IF e_ucomm = 'B_SUM'.
DESCRIBE TABLE lspfli[] LINES sum.
MESSAGE i001(00) WITH '當前ALV表格中總行數;' sum.
ENDIF.
ENDMETHOD.
METHOD handle_double_click.
DATA ls_spfli TYPE sflight.
READ TABLE lspfli INTO ls_spfli INDEX es_row_no-row_id.
MESSAGE i001(00) WITH '當前行:' es_row_no-row_id
'航班代碼:' ls_spfli-carrid.
ENDMETHOD.
ENDCLASS.
"SELECTION-SCREEN BEGIN OF BLOCK
START-OF-SELECTION.
CALL SCREEN 100.
FORM alvshow.
CREATE OBJECT g_custom_container
EXPORTING
container_name = g_container.
CREATE OBJECT grid
EXPORTING
i_parent = g_custom_container.
is_layout-info_fname = 'COLOR' .
CALL METHOD grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
is_layout = is_layout
i_save = 'X'
CHANGING
it_outtab = lspfli[]
it_fieldcatalog = fieldcat[].
"註冊ALV中引用事件
SET HANDLER alv_event_receiver=>handle_toolbar
alv_event_receiver=>handle_menu_button
alv_event_receiver=>handle_user_command
alv_event_receiver=>handle_double_click
FOR ALL INSTANCES.
"調用方法激活自定義工具欄對象
CALL METHOD grid->set_toolbar_interactive.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE sy-ucomm.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'EXEC'.
SELECT *
FROM sflight INTO CORRESPONDING FIELDS OF TABLE lspfli
.
lspfli-color = 'C610'.
* MODIFY lspfli TRANSPORTING color WHERE
IF g_custom_container IS INITIAL.
PERFORM alvshow.
ELSE.
CALL METHOD grid->refresh_table_display.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'T001'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT