选择屏幕时,不需要话个alv控件,

这时也可以用OO ALV的

REPORT  zlm_alv_oo_03 .


DATA :

 

          g_it_spfli  TYPE  TABLE  OF spfli ,

 

          g_wa_spfli  TYPE spfli .



DATA : l_ref_alv    TYPE  REF  TO cl_gui_alv_grid .


DATA : g_s_events  TYPE slis_t_event .


DATA : gt_events    TYPE slis_t_event ,                    "ALV 事件

 

          gw_events    TYPE slis_alv_event .

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

*       事件类定义

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

CLASS lcl_event_handler DEFINITION .

  PUBLIC SECTION .

    METHODS:

*To add new functional buttons to the ALV toolbar

    handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

    IMPORTING e_object ,"e_interactive     ,


*To implement user commands

    handle_user_command

    FOR EVENT user_command OF cl_gui_alv_grid

    IMPORTING e_ucomm             ,


*Hotspot click control

    handle_hotspot_click

    FOR EVENT hotspot_click OF cl_gui_alv_grid

    IMPORTING e_row_id e_column_id es_row_no ,


*Double-click control

    handle_double_click

    FOR EVENT double_click OF cl_gui_alv_grid

    IMPORTING e_row e_column    ,


    handle_data_changed

    FOR EVENT data_changed OF cl_gui_alv_grid

    IMPORTING er_data_changed         .


ENDCLASS.                    "lcl_event_handler DEFINITION


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

*       CLASS lcl_event_handler IMPLEMENTATION

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

*  事件类实现

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

CLASS lcl_event_handler IMPLEMENTATION .

*Handle Toolbar

  METHOD handle_toolbar.

    PERFORM handle_toolbar USING e_object ." e_interactive .

  ENDMETHOD .                    "handle_toolbar


*Handle Hotspot Click

  METHOD handle_hotspot_click .

    PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no .

  ENDMETHOD .                    "handle_hotspot_click


*Handle Double Click

  METHOD handle_double_click .

    PERFORM handle_double_click USING e_row e_column .

  ENDMETHOD .                    "handle_double_click


*Handle User Command

  METHOD handle_user_command .

    PERFORM handle_user_command USING e_ucomm .

  ENDMETHOD.                    "handle_user_command


*Handle Data Changed

  METHOD handle_data_changed .

    PERFORM handle_data_changed USING er_data_changed .

  ENDMETHOD.                    "handle_data_changed


ENDCLASS .                     "lcl_event_handler IMPLEMENTATION

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

*&      Form  HANDLE_BEFORE_USER_COMMAND

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

*       text

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

*      -->P_E_UCOMM  text

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

FORM handle_before_user_command  USING    p_e_ucomm.


ENDFORM.                    " HANDLE_BEFORE_USER_COMMAND

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

*&      Form  HANDLE_DOUBLE_CLICK

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

*       text

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

*      -->P_E_ROW  text

*      -->P_E_COLUMN  text

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

FORM handle_double_click   USING    e_row TYPE lvc_s_row

                                    e_column TYPE lvc_s_col.

  READ TABLE g_it_spfli INTO g_wa_spfli  INDEX e_row-index.

  IF sy-subrc = 0 AND e_column-fieldname = 'CITYFROM'.

    MESSAGE g_wa_spfli-cityfrom   TYPE 'I'.

  ELSE.

    MESSAGE g_wa_spfli-carrid TYPE 'I'.

  ENDIF.

ENDFORM.                    " HANDLE_DOUBLE_CLICK

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

*&      Form  HANDLE_HOTSPOT_CLICK

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

*       text

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

*      -->P_E_ROW_ID  text

*      -->P_E_COLUMN_ID  text

*      -->P_ES_ROW_NO  text

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

FORM handle_hotspot_click  USING    e_row       TYPE lvc_s_row

                                    e_column    TYPE lvc_s_col

                                    es_row_no   TYPE lvc_s_roid.




ENDFORM.                    " HANDLE_HOTSPOT_CLICK

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

*&      Form  HANDLE_TOOLBAR

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

*       text

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

*      -->P_E_OBJECT  text

*      -->P_E_INTERACTIVE  text

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

form HANDLE_TOOLBAR  using    p_e_object

                              p_e_interactive.


endform.                    " HANDLE_TOOLBAR 

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

*&      Form  HANDLE_USER_COMMAND

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

*       text

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

*      -->P_E_UCOMM  text

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

FORM handle_user_command  USING    p_e_ucomm.


ENDFORM.                    " HANDLE_USER_COMMAND


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

*&      Form  HANDLE_DATA_CHANGED

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

*       text

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

*      -->P_ER_DATA_CHANGED  text

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

FORM handle_data_changed  USING    p_er_data_changed.


ENDFORM.                    " HANDLE_DATA_CHANGED



START-OF-SELECTION.


  SELECT * FROM spfli INTO TABLE g_it_spfli.

  PERFORM zform_show.




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

*&      Form  zform_show

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

FORM zform_show.

*填充事件信息

  CLEAR gt_events[].

  gw_events-name = 'CALLER_EXIT'.

  gw_events-form = 'CALLER_EXIT'.

  APPEND gw_events TO gt_events.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

   EXPORTING

     i_callback_program                = sy-repid

     i_structure_name                  = 'SPFLI'

     it_events                         = gt_events[]

    TABLES

      t_outtab                          =  g_it_spfli

            .

ENDFORM.                    "zform_show


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

*&      Form  caller_exit

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

FORM caller_exit USING ls_data TYPE slis_data_caller_exit.

  DATA: o_event_handler    TYPE REF TO lcl_event_handler."声明事件处理类对象。

*创建事件处理类

  CREATE OBJECT o_event_handler.

*获取全局的ALV对象

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      e_grid = l_ref_alv.

*设置事件理类

  SET HANDLER o_event_handler->handle_toolbar        FOR l_ref_alv.

  SET HANDLER o_event_handler->handle_user_command   FOR l_ref_alv.

  SET HANDLER o_event_handler->handle_double_click   FOR l_ref_alv.

  SET HANDLER o_event_handler->handle_hotspot_click  FOR l_ref_alv.

  SET HANDLER o_event_handler->handle_data_changed   FOR l_ref_alv.


ENDFORM.                    "CALLER_EXIT