如何在abap中为ALV添加事件处理

1.定义事件处理类(DEFINITION和IMPLEMENTATION)

如:定义类LCL_EVENT_RECEIVER

2.类的创建

在开头数据定义部分,用参考的方式,创建类

EVENT_RECEIVER  TYPE REF TO LCL_EVENT_RECEIVER.

3.类的实例化以及使用

          代码将会把需要的数据放入一个内表中,然后使用这个内表 为ALV表格赋值

          “ALV表格-->table control控件-->TC的容器 ”  

在上述赋值全部完成后

实例化

CREATE OBJECT EVENT_RECEIVER.

使用

SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK  FOR  GRID."这个GRID就是alv表格

也就是把这个事件处理类的实例指派给一个具体的ALV


==========================================================================

下面是一个具体的例子

*---------------------------------------------------------------------*
*       CLASS alv_event_receiver DEFINITION 事件的定义,触发,捕获,响应
*---------------------------------------------------------------------*
CLASS ALV_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    METHODS:
    HANDLE_DOUBLE_CLICK
        FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
        IMPORTING E_ROW E_COLUMN ES_ROW_NO.  "输出参数

  PRIVATE SECTION.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS alv_event_receiver IMPLEMENTATION  实现
*---------------------------------------------------------------------*

CLASS ALV_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_DOUBLE_CLICK.

    L_FIELD      = E_COLUMN-FIELDNAME.               "选中行
    L_ROW        = ES_ROW_NO-ROW_ID.                 "选中的字段

    READ TABLE ITAB_LIST INTO L_WA_CLICK INDEX ES_ROW_NO-ROW_ID .

    IF SY-SUBRC = 0.
*      CONCATENATE '您选中第' L_ROW  '行,字段为:' L_FIELD  ',选中值为:'  INTO L_MSG.
      CASE L_FIELD.
        WHEN 'LIFNR'.
          "在此处添加提取数据的代码,提各种信息然后显示在消息窗口
          CONCATENATE L_MSG L_WA_CLICK-LIFNR INTO L_MSG.
          MESSAGE L_MSG TYPE 'I'.
        WHEN 'KNUMH'.
*         CONCATENATE L_MSG L_WA_CLICK-KNUMH INTO L_MSG.
*         MESSAGE L_MSG TYPE 'I'.
        CALL SCREEN 500.   "在此 调用普通屏幕 在普通屏幕中显示这一条信息的详情

      ENDCASE.

    ENDIF.

  ENDMETHOD.

ENDCLASS.
*&---------------------------------------------------------------------*
*&      PBO的Module SEC_DATA  对上述类的调用
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE SEC_DATA OUTPUT.

  CLEAR GS_LAYOUT.
  CLEAR FIELDCAT_200[].

  "为普通屏幕200提供 字段格式
  PERFORM FIELDCAT_TC_INIT USING FIELDCAT_200[].
  "为普通屏幕200提供 标题
  PERFORM LAYOUT_INIT_200 USING GS_LAYOUT.

IF S200_CON IS INITIAL.

  CREATE OBJECT S200_CON           "TC控件
  EXPORTING
    CONTAINER_NAME = CON200P.      "TC控件的容器   输入参数  "DATA: CON200P TYPE SCRFNAME VALUE 'TC_TEST1'

  CREATE OBJECT GRID200            "用于显示的表格(准备放到TC控件中)
  EXPORTING
    I_PARENT = S200_CON.           "TC控件

ENDIF.

    CALL METHOD GRID200->set_table_for_first_display            "此方法用于把内表数据显示到TC控件中
    EXPORTING
      IS_LAYOUT = GS_LAYOUT           "布局
    CHANGING
      IT_OUTTAB = ITAB_LIST[]         "数据源
      IT_FIELDCATALOG = FIELDCAT_200. "字段格式         
    CREATE OBJECT G_EVENT.
    SET HANDLER G_EVENT->HANDLE_DOUBLE_CLICK FOR GRID200.
ENDMODULE.



你可能感兴趣的:(abap)