類 事件響應

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(00WITH '當前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(00WITH '當前行:' 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章