二维码

[ooalv] 在ooalv中,处理alv双击事件实例

Twilight发表于 2014-01-19 14:38Twilight 最后回复于 2014-01-19 14:38 [复制链接] 4202 0

双击时,注意状态条显示的信息:行号、选择列名、航班表中的connid和carrid的只能,执行效果如下。
oo方式的双击事件.jpg
注:该实例是在屏幕上建立custom control控件,实现oolav输出报表 的扩展,如阅读有困难可先参考它。

主程序:
  1. REPORT  ZDEMON_005.
  2. DATA OK_CODE TYPE SY-UCOMM. " SY-UCOMM:Function code that PAI triggered
  3. DATA IT_SPFLI TYPE TABLE OF SPFLI.
  4. DATA:S_CONTAINER TYPE SCRFNAME VALUE 'ALVDATA',  " SCRFNAME: Name of a Screen Element  只能为该类型
  5.       ALV_GRID TYPE REF TO CL_GUI_ALV_GRID, "参考CL_GUI_ALV_GRID类,定义对象ALV_GRID
  6.       LO_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
  7. CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED."DEFERRED大概就是 “预定义”类,先告诉你会有这么一个类,可被别的地方用,之后它还是要定义的
  8. DATA EVENT_RECEIVER TYPE REF TO  LCL_EVENT_RECEIVER. "定义事件

  9. SELECT *
  10.   INTO CORRESPONDING FIELDS OF TABLE IT_SPFLI
  11.   FROM SPFLI.

  12. CALL SCREEN 100.

  13. *定义事件的属性和方法
  14. CLASS LCL_EVENT_RECEIVER DEFINITION.
  15.   PUBLIC SECTION.
  16.     METHODS:
  17. *双击方法
  18.     HANDLE_DOUBLE_CLICK
  19.       FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
  20.         IMPORTING E_ROW E_COLUMN.
  21. ENDCLASS.
  22. *双击方法实现
  23. CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  24.   METHOD HANDLE_DOUBLE_CLICK.
  25.     DATA:LI_SPFLI LIKE LINE OF IT_SPFLI.
  26.     READ TABLE IT_SPFLI INDEX E_ROW-INDEX INTO LI_SPFLI.
  27. *将行列等信息合并到字符串
  28.     DATA:S1(100).
  29.     CONCATENATE '行:' E_ROW-INDEX '列名:' E_COLUMN-FIELDNAME INTO S1.
  30.     CONCATENATE S1 'CONNID:' LI_SPFLI-CONNID INTO S1.
  31.     CONCATENATE S1 'CARRID:' LI_SPFLI-CARRID INTO S1.
  32. *在状态条显示单击的行与列信息
  33.     MESSAGE S208(00) WITH S1. "系统定义的消息类
  34.   ENDMETHOD.
  35. ENDCLASS.
  36. MODULE STATUS_0100 OUTPUT.
  37.   SET PF-STATUS 'STATUS1'.
  38.   SET TITLEBAR 'ALV TITLEBAR'.
  39. ENDMODULE.                 " STATUS_0100  OUTPUT

  40. MODULE USER_COMMAND_0100 INPUT.
  41. CASE OK_CODE.
  42.   WHEN 'CANCEL'.
  43.     LEAVE PROGRAM.
  44.   WHEN 'BACK' OR 'EXIT'.
  45.     LEAVE TO SCREEN 0.
  46. ENDCASE.
  47. ENDMODULE.                 " USER_COMMAND_0100  INPUT

  48. MODULE CLEAR_OK_CODE OUTPUT.
  49.   CLEAR OK_CODE.
  50. ENDMODULE.                 " CLEAR_OK_CODE  OUTPUT

  51. MODULE DISPLAY_OOALV OUTPUT.
  52.   IF LO_CUSTOM_CONTAINER IS INITIAL. "如果LO_CUSTOM_CONTAINE RDialog容器对象不存在,实例化该对象
  53.     CREATE OBJECT LO_CUSTOM_CONTAINER
  54.            EXPORTING CONTAINER_NAME = S_CONTAINER.
  55.     CREATE OBJECT ALV_GRID "实例化alv对象
  56.            EXPORTING I_PARENT = LO_CUSTOM_CONTAINER.
  57.     CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY "调用alv对象的方法显示报表
  58.          EXPORTING I_STRUCTURE_NAME = 'SPFLI'
  59.            CHANGING IT_OUTTAB = IT_SPFLI.
  60. *alv对象分配双击事件
  61.     CREATE OBJECT EVENT_RECEIVER.
  62.     SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID.
  63.   ENDIF.
  64. ENDMODULE.                 " DISPLAY_OOALV  OUTPUT
复制代码


回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表