10月底的时候进行了BC412课程的培训,课后自己做了一些实验,从今天开始就将这些实验记录下来,以便于以后需要使用的时候能够查询一下!(很遗憾的是公司组织了很多的培训,但是在实际工作中很少能够运到,所以只能记录下来,怕以后使用的时候给忘了).今天主要记录一下如何在ALV GRID事件中实现双击事件.这一需求应该在很多场合都能够运用到,因此先记录下.

首先大概讲一下ALV GRID双击事件的实现原理:ALV GRID继承自CL_GUI_ALV_GRID这个Class interface,而在CL_GUI_ALV_GRID这个class interface中已经定义了很多的Methods以及Events。例如,在ALV GRID中我们常用到的 SET_TABLE_FOR_FIRST_DISPLAY这个method就可以在CL_GUI_ALV_GRID的methods中找到。因此如果我们需要查看在ALV GRID中我们能够使用哪些method或者那些Event,只需要在Repository Browser中选择Class/Interfase然后输入CL_GUI_ALV_GRID,就可以查看到所以已经定义好的menthod以及events等等。言归正传,在这次试验中我们需要实现一个ALV Grid的Dobule Click事件,我们在CL_GUI_ALV_GRID的Events中可以找到一个"DOUBLE_CLICK"这样的事件。而这个DOUBLE_CLICK都接收那些参数呢?双击DOUBLE_CLICK,然后在右边的栏位中选中DOUBLE_CLICK时间,在左上方有一个Paremeters的按钮,点击进去以后我们看到有E_ROW、E_COLUMN,ES_ROW_NO这三个参数。OK,现在事件已经找到了我们接下来需要做的工作就是定义一个类去实现这个事件,并将该事件注册到我们的ALV GRID中。下面将结合实际的例子来进行讲述:

一,在Screen中绘制一个Custom Control,并命名为ALV_GRID;在Process before output中定义 MODULE STATUS_0100,在Process After Input中定义 MODULE USER_COMMAND_0100  。

二,在程序中定义一个名为 grid_event_receiver的CLASS。具体代码如下:

CLASS grid_event_receiver DEFINITION.
              PUBLIC SECTION.
                 METHODS:
                      handler_Double_click
                           FOR EVENT DOUBLE_CLICK of cl_gui_alv_grid
                           IMPORTING e_row e_column,
         ENDCLASS.                    "grid_event_rece

三,在程序中对grid_event_receiver这个CLASS进行具体实现。具体代码如下:

CLASS grid_event_receiver IMPLEMENTATION.
                   METHOD handler_Double_click.
                       DATA: ls_sflight like line of gt_sflight.
                       READ TABLE gt_sflight INDEX e_row-index INTO ls_sflight.
                       SELECT * from sbook INTO TABLE gt_sbook
                                                     WHERE carrid  = ls_sflight-carrid
                                                      and    connid  = ls_sflight-connid
                                                      and    fldate  = ls_sflight-fldate.
                       PERFORM DETAIL_LIST.
                       ENDMETHOD.                  "handler_Double_click 
            ENDCLASS.                    "grid_event_receiver IMPLEMENTATION

通过以上的代码,我们可以看到在handler_double_click事件中我们Dobule_Click事件中的Paremeter e_row(表示双击事件发生的该行)的index从gt_sflight 这个内表中读取数据,然后再从sbook这个table中读取数据,最后再执行DETAIL_LIST这个form。

四,在程序中定义一些变量,代码如下:

DATA: custom_container type ref to cl_gui_custom_container,               "custom_container:the container of grid1
                           grid1  type ref to cl_gui_alv_grid,                                               "The main alv grid to show the mail data
                           grid2  type ref to cl_gui_alv_grid,                                               "The Detail alv grid to show the detail data
                           dialogbox_container type ref to cl_gui_dialogbox_container,         "dialogbox_container:The container of grid2
                           event_receiver type ref to grid_event_receiver,                            "event_receiver:Point to grid_event_recerive

五,在PBO的moudule中读取数据并显示在grid1并注册Double_Click事件到grid1上。在  STATUS_0100这个module中首先要第四部中定义的变量进行实例话,然后调用ALV Grid的 SET_TABLE_FOR_FIRST_DISPLAY方法显示数据,最后需要将前面定义的double click事件注册到该grid上。具体代码为:

IF custom_container is INITIAL.
    PERFORM Get_DATA TABLES GT_OUTPUT[].      "Get data from table and fill the data into internal table GT_OUTPUT
    CREATE OBJECT custom_container            "Create the instance of custom_container
        EXPORTING
          CONTAINER_NAME = 'ALV_GRID'         "Set the Container_name to 'ALV_GRID'(Define in Screen)
        exceptions
          cntl_error = 1
          cntl_system_error = 2
          create_error = 3
          lifetime_error = 4
          lifetime_dynpro_dynpro_link = 5.
    CREATE OBJECT grid1 EXPORTING i_parent = custom_container.  "Create the instance of grid1 and set custom_container as grid1's Container
    gs_layout-grid_title = 'Flight'(100).
    gs_layout-excp_fname = g_lights_name.
    gs_layout-sel_mode = 'A'.
    CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY       "Call the method to show data
      EXPORTING
        I_STRUCTURE_NAME              = 'SFLIGHT'
      CHANGING
        IT_OUTTAB                     = GT_OUTPUT[]
*    EXCEPTIONS
*      INVALID_PARAMETER_COMBINATION = 1
*      PROGRAM_ERROR                 = 2
*      TOO_MANY_LINES                = 3
*      others                        = 4.
    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.                       "Create the instance of event_receiver
    set HANDLER event_receiver->handler_Double_click FOR grid1.   "register the double_click event to grid1
  ENDIF.

六,在PAI的module中处理其他一些代码。

通过以上一些步骤我们就可以实现ALV GRID的双击事件了。需要注意的是:在以上的代码中我们没有对Grid2以及dialogbox_container进行实例话。而对这两者的实例化以及如何在grid2种显示详细数据放置在Dobule Click事件的实现过程中(对应前面代码中的  PERFORM DETAIL_LIST)。Detail_LIST中的具体代码如下:

FORM DETAIL_LIST .
  CREATE OBJECT dialogbox_container         "Create the instance of dialogbox_container
     EXPORTING
       TOP      = 100
       LEFT     = 150
       WIDTH    = 800
       HEIGHT   = 200
       LIFETIME = cntl_lifetime_dynpro
       .
  CREATE OBJECT grid2                      "Create the instance of grid2 and set dialogbox_container as its container
       EXPORTING i_parent = dialogbox_container.
  CALL METHOD grid2->SET_TABLE_FOR_FIRST_DISPLAY   "call the method to show the data
    EXPORTING
      I_STRUCTURE_NAME = 'SBOOK'
    CHANGING
      IT_OUTTAB        = gt_sbook.
ENDFORM.                    " DETAIL_LIST

好了,在ALV GRID中如何实现双击事件就讲述到这里。在下一篇中我将记录一下如何以红绿灯的形式在ALV GRID中显示数据。

ALV GRID学习笔记----Double Click事件相关推荐

  1. miniui文件上传 linux,MINIUI grid学习笔记

    grid 控件 a.事件的绑定和移除 grid.on("rowclick", fn); //绑定事件 (这个的话类似jquery的绑定事件) grid.un("rowcl ...

  2. day03_js学习笔记_03_js的事件、js的BOM、js的DOM

    day03_js学习笔记_03_js的事件.js的BOM.js的DOM ================================================================ ...

  3. 【前端学习笔记】JQuery事件细节、JQ进阶常用方法

    事件细节----------------------- ev直接使用,不需要兼容操作ev.pageX(Y) 鼠标的坐标(相对于文档) : ev.clientX(相对于窗口)ev.which(能监控鼠标 ...

  4. Vue2.0学习笔记:Vue事件修饰符的使用

    事件处理 如果需要在内联语句处理器中访问原生DOM事件.可以使用特殊变量$event,把它传入到methods中的方法中. 在Vue中,事件修饰符处理了许多DOM事件的细节,让我们不再需要花大量的时间 ...

  5. 【ALB学习笔记】基于事件触发方式的串行通信接口数据接收案例

    基于事件触发方式的串行通信接口数据接收案例 广东职业技术学院  欧浩源 1.案例背景 之前写过一篇<基于多线程方式的串行通信接口数据接收案例>的博文,讨论了采用轮询方式接收串口数据的情况. ...

  6. Asp.net控件开发学习笔记(九)----服务器控件事件

    EventCollection 如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高.EventH ...

  7. ALV TREE学习笔记

    在这一篇中将学习一下ALV Tree的使用方法.通过名字可以看出,ALV TREE应该是将ALV与TREE这两者进行组合. ALV Tree实现原理:创建一个 cl_gui_alv_tree对象,定义 ...

  8. 【Libevent】Libevent学习笔记(三):事件循环

    00. 目录 文章目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. eve ...

  9. 【传智播客】Libevent学习笔记(三):事件循环

    目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_l ...

最新文章

  1. 浅谈loadrunner中pacing设置
  2. Spark读取普通RDD加载为DataFrame
  3. Python--简单的目录扫描脚本
  4. glide加载gif图不显示动画_用Python绘制会动的柱形竞赛图
  5. Java番外篇2——jdk8新特性
  6. html导出excel 内存不足,web导出excel那些坑
  7. C 语言的32 个关键字意义
  8. java将map输出到d盘_java后台的“/”相对路径不是代表webroot吗,为什么在这里代表了d盘,测试的文件都传到了d盘呀?...
  9. 二阶系统的性能分析(开环相幅和阶跃响应)——自动控制原理基础补充(三)
  10. python print文本和数字混合_详解Python中的文本处理
  11. 在线供应链管理系统一体化解决方案,整合B2B上下游供应资源
  12. excel表格怎么关闭函数计算机,excel表格的数据如何去掉公式-如何取消Excel表格里面的函数公式...
  13. 大学计算机应用基础第二版习题答案,大学计算机应用基础练习题库及答案.docx...
  14. Mixpanel使用注意点
  15. 微信表情符号 mysql_Emoji表情符号入MySQL数据库报错的解决方案
  16. 微信小程序_map组件实现定位
  17. 智过网:2023年注册测绘师考试执业范围
  18. 国外问卷调查是骗人的吗?
  19. 魔方二代 php代码还原
  20. 菜鸟的经历和今后目标

热门文章

  1. 几个小例子告诉你, 一行Python代码能干哪些事
  2. 【BFS】【并查集】【Tarjan】【LCA】Gym - 101173H - Hangar Hurdles
  3. 使用NuGet发布自己的类库包(Library Package)
  4. php如何通过变量销毁unset的过程讲解
  5. jQuery Tab
  6. 如何在XenServer主机上安装虚拟机
  7. Spring Boot中如何干掉if else
  8. python 不同集合上元素的迭代 chain()
  9. 细说多线程(六) —— 异步 SqlCommand
  10. 《超越平凡的平面设计: 版式设计原理与应用》—色轮