ALV控件的简单案例之二:自定义ALV…

有时候需要在工具条上加个按钮:
ALV控件的简单案例之二:自定义ALV控件工具条按钮

有一种方法是通过ALV控件相关事件接口实现
1)ALV控件的工具条处理事件,定义新按钮和功能码
2)ALV控件的功能码处理事件,定义用户单击按钮产生的功能码

首先
INCLUDE  .
然后定义事件类和对象
"事件定义
CLASS lcl_envent_receiver DEFINITION DEFERRED.
DATA   event_receiver TYPE REF TO lcl_envent_receiver.

*----------------------------------------------------------------------*
*       CLASS lcl_envent_receiver DEFINITION
*----------------------------------------------------------------------*
* 定义事件类
*----------------------------------------------------------------------*
CLASS lcl_envent_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
     handle_toolbar                                                    "工具条句柄
         FOR EVENT toolbar OF cl_gui_alv_grid
         IMPORTING e_object e_interactive,

    handle_user_command                                                "用户命令句柄
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING e_ucomm.
ENDCLASS.                    "lcl_envent_receiver DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_envent_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_envent_receiver IMPLEMENTATION.
  METHOD handle_toolbar.
    DATA:
          ls_toolbar TYPE stb_button.
    CLEAR ls_toolbar-butn_type.
    APPEND ls_toolbar TO e_object->mt_toolbar.                         "添加一个按钮到工具条
    CLEAR ls_toolbar.

    MOVE 'SHOW_DETA' TO ls_toolbar-function.                           "设置此按钮的功能码

    MOVE icon_ppe_vnode TO ls_toolbar-icon.                            "图标
    MOVE '明细' TO  ls_toolbar-quickinfo.                              "显示信息,文字
    MOVE '明细' TO  ls_toolbar-text.
    MOVE '' TO ls_toolbar-disabled.                                    
    APPEND ls_toolbar TO e_object->mt_toolbar.                         "将明细按钮添加到工具条
  ENDMETHOD.                    "handle_toolbar

  METHOD handle_user_command.
    DATA:
          lt_rows TYPE lvc_t_row.
    CASE e_ucomm.
      WHEN 'SHOW_DETA'.                                                "当单击 明细按钮时的事件
        CALL METHOD alv_grid->get_selected_rows
          IMPORTING
            et_index_rows = lt_rows.                                   "返回的是选择的行号1234等 

*************知道行号了,可以从内表中读取数据,然后做相应操作***********

      WHEN OTHERS.
    ENDCASE.
  ENDMETHOD.                    "user_command
ENDCLASS.                    "lcl_envent_receiver IMPLEMENTATION


上面是定义部分

具体哪里控制?
在显示之后:

CALL  METHOD alv_grid ->set_table_for_first_display
  EXPORTING
     i_structure_name               =  'SPFLI'
  CHANGING
      it_outtab                      = g_it_spfli
    .
   IF sy -subrc <>  0 .
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF .

  "创建命令接受对象
  CREATE OBJECT event_receiver.
  "设置句柄
  SET HANDLER event_receiver->handle_user_command         "响应用户操作
    FOR alv_grid.

  SET HANDLER event_receiver->handle_toolbar              "工具条
    FOR alv_grid.

  CALL METHOD alv_grid->set_toolbar_interactive.          "调用接口设置工具条


转载于:https://www.cnblogs.com/senlinmu110/p/3802278.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值