DATA: gr_alvgrid    TYPE REF TO cl_gui_alv_grid ,"ALV对象
      gt_fieldcat   TYPE lvc_t_fcat ,            "ALV字段控制
      gs_layout     TYPE lvc_s_layo ,            "ALV布局控制   
      gs_variant    TYPE disvariant,             "当前程序
      alv_container        TYPE scrfname VALUE 'T_COL',  "屏幕元素名称,ALV展示数据存放在此容器中
      alv_custom_container TYPE REF TO cl_gui_custom_container,ALV容器对象

*定义一个类
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_double_click    "方法handle_double_click用于处理cl_gui_alv_grid类中的双击事件double_click
      FOR EVENT double_click of cl_gui_alv_grid
      IMPORTING e_row e_column.
  PRIVATE SECTION.
ENDCLASS

*方法的实现
CLASS lcl_event_handler IMPLEMENTATION.
  METHOD handle_double_click.
    PERFORM handle_double_click USING e_row e_column es_row_no.   "定义处理双击事件方法, 如果双机alv某一行时,需要弹出子窗口中的alv的话这边,可以在此方法中获取需要显示的数据,还要类似于CALL 

SCREEN 0200 STARTING AT 10 5 ENDING AT 100 25.call出子屏幕
  ENDMETHOD.                    "handle_double_click
ENDCLASS.  


DATA: gr_event_handler TYPE REF TO lcl_event_handler. "定义对象引用,用于双击事件

*alv实现
 gs_variant-report = sy-repid.

  IF gr_alvgrid IS INITIAL.
    CREATE OBJECT gr_alvgrid "创建gr_alvgrid对象
      EXPORTING
        i_parent = cl_gui_container=>screen0.

    CREATE OBJECT gr_event_handler.  创建gr_event_handler对象
    SET HANDLER gr_event_handler->handle_double_click FOR gr_alvgrid. "注册处理双机事件的方法
    PERFORM display_alv. "ALV实现
  ELSE.
    call METHOD gr_alvgrid->refresh_table_display. 刷新alv报表
  ENDIF.


FORM DISPLAY_ALV .  "调用ALV的实现方法

    CALL METHOD gr_alvgrid->set_table_for_first_display
      EXPORTING
        is_variant                    = gs_variant    "当前程序
        i_save                        = 'A'
        is_layout                     = gs_layout     "ALV布局
      CHANGING
        it_outtab                     = gt_zc_main[]  "内表
        it_fieldcatalog               = gt_fieldcat   "需要输出的字段
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
    IF sy-subrc <> 0.

    ENDIF.

ENDFORM

      
View Code

相关文章: