ABAP OO ALV

 

1、定义变量:

DATA:gs_toolbar TYPE stb_button."工具栏按钮
DATA:gr_alv_grid TYPE REF TO cl_gui_alv_grid. "定义cl_gui_alv_grid 类引用
DATA:gr_alv_container TYPE REF TO cl_gui_custom_container."定义cl_gui_custom_container 容器

 

2、定义类:

复制代码
CLASS cl_event_handle DEFINITION."事件处理类定义
        PUBLIC SECTION.
         "初始化ALV工具栏对象事件,如增加按钮并设定属性
        METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
          IMPORTING
            e_object
            e_interactive.

        "ALV工具栏按钮的点击事件
        METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
          IMPORTING
            e_ucomm.

*    "该事件用于在下ALV工具栏的下拉菜单按钮中增加选项
*    METHODS handle_menu_button FOR EVENT menu_button OF cl_gui_alv_grid
*      IMPORTING
*        e_object
*        e_ucomm.

*    "ALV表格双击事件
*    METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
*      IMPORTING
*        e_row     "作废
*        e_column  "通过e_column-fieldname 获取点击字段名,点击列
*        es_row_no. "通过es_row_no-row_id 返回当前行号
*
*
*    "字段的字段目录HOTSPOT设置为"X",热点单击事件
*    METHODS handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
*      IMPORTING
*        e_row_id "作废
*        e_column_id "通过e_column_id-fieldname 获取点击字段名,点击列
*        es_row_no. "通过es_row_no-row_id 返回当前行号
*
*    " ENTER时触发
*    METHODS handle_enter FOR EVENT data_changed_finished OF cl_gui_alv_grid
*      IMPORTING
*        e_modified
*        et_good_cells.
复制代码

 

3、实现类:

复制代码
CLASS cl_event_handle IMPLEMENTATION."事件处理类实现部分
        METHOD handle_toolbar.
          gs_toolbar-function = 'ZPRINT'. "按钮的FunctionCode
          gs_toolbar-icon = icon_print."按钮图标,通过Tcode:ICON可以查看
          gs_toolbar-text = '打印'.    "按钮标签
          gs_toolbar-butn_type = '0'.    "定义按钮类型,0为标准按钮,具体取值可参考这里
          APPEND gs_toolbar TO e_object->mt_toolbar."添加按钮到工具栏中
        ENDMETHOD.   
        METHOD handle_user_command.
          CASE e_ucomm.
          WHTN 'ZPRINT'.
          ENDCASE.
          " 刷新界面
          CALL METHOD gr_alv_grid->refresh_table_display.
        ENDMETHOD.                    "handle_user_command
复制代码

 

---------------------------------------------------------------界面-----------------------------------------------------------------------

创建容器、显示ALV:

复制代码
IF gr_alv_container IS INITIAL.
        "创建ALV容器对象
        CREATE OBJECT gr_alv_container
          EXPORTING
            container_name = 'GC_TAB'.

        "创建ALV控件
        CREATE OBJECT gr_alv_grid
          EXPORTING
            i_parent = gr_alv_container.
        CALL METHOD gr_alv_grid->set_table_for_first_display
          EXPORTING
            i_save                        = 'U'
            i_default                     = 'X'
            is_layout                     = gs_layout
          CHANGING
            it_outtab                     = gt_out
            it_fieldcatalog               = gt_fieldcat
          EXCEPTIONS
            invalid_parameter_combination = 1
            program_error                 = 2
            too_many_lines                = 3
            OTHERS                        = 4.
        IF sy-subrc <> 0.
*                              Implement suitable error handling here
        ENDIF.
        CREATE OBJECT:gr_event_handle.
        "为ALV按钮注册监听事件
        SET HANDLER :gr_event_handle->handle_toolbar      FOR gr_alv_grid,
                     gr_event_handle->handle_user_command FOR gr_alv_grid.
        "调用此方法才能激活工具栏上增加的自定义按钮
        CALL METHOD gr_alv_grid->set_toolbar_interactive.
      ELSE.
        CALL METHOD gr_alv_grid->refresh_table_display.
      ENDIF.
复制代码

 

 

posted @   Delaine  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示