王家屋场


记录点滴!
<不要退缩,要勇往直前。作为一个男人,要拿出男人的勇气和豪情,学会挑战陌生和困难,挺过去你就是专家。>
  首页  :: 新随笔  :: 联系 :: 管理

ALVGRID学习笔记----Add button on toolbar

Posted on 2009-01-07 22:16  Flying in sky  阅读(549)  评论(0编辑  收藏  举报

      前面两天学习了ALGRID的Dobule Click事件以及以红绿灯显示数据,今天将学习一下如何在ALVGRID的ToolBar上添加自定义的Button.

      在ALVGRID的ToolBar上添加自定义Button,原理与添加Dobule Click事件差不多。具体说来就是:自定义一个Class用来实现ALVGRID的ToolBar事件,在ToolBar事件中添加自定义按钮,然后再实现ALVGRID的 USER_COMMAND,用来处理点击Button以后的后续动作。

      首先先了解一下ALVGRID的ToolBar事件 。ToolBar事件主要用来在ALVGRID的工具栏上添加一些自定义的东西。在Repository Browser中选择Class/Interface,然后选择 USER_COMMAND这个这个interface。展开Events将显示所有我们可以使用的事件。双击 "ToolBar",选择Paremeters按钮,我们将开到ToolBar事件可以带E_OBJECT以及E_INTERACTIVE两个参数。接下来了解一下USER_COMMAND事件。USER_COMMAND事件主要用来处理用户自定义的一些命令。该事件带有一个E_UCOMM的参数。

      接下来将以一个具体代码来说明如何在ALVGRID的TOOLBAR中添加自定义按钮。在该实例中我们将在ALVGRID的TOOLBAR上添加一个自定义的Button。选中ALVGRID记录中的一行,双击自定义的button,将进入到另外一个Screen(No:0120)并将详细数据显示在屏幕中。主要代码如下:

      一,自定义一个Class,里面包含了2个method: handler_toolbar对应ALVGRID的TOOLBAR事件, handler_user_command对应ALVGRID的USER_COMMAND事件。代码如下:

  CLASS grid_event_receiver DEFINITION.
  PUBLIC SECTION.
    METHODS:
       handler_toolbar FOR EVENT TOOLBAR OF cl_gui_alv_grid
       IMPORTING e_object E_INTERACTIVE,
       handler_user_command FOR EVENT  USER_COMMAND of cl_gui_alv_grid
       IMPORTING E_UCOMM.
ENDCLASS.                    "event_receiver DEFINITION

   二,对CLASS中定义的方法进行实现。在handler_toolbar事件中主要添加一个类型为stb_button的Button,并分别对stb_button的 function、  quickinfo、 text等属性赋值。在handler_user_command 事件中主要用于处理点击Button后的动作。代码如下:

  CLASS grid_event_receiver IMPLEMENTATION.
  METHOD handler_toolbar.
    DATA: ls_toolbar  TYPE stb_button.
    CLEAR ls_toolbar.
    MOVE 'BOOKINGS' TO ls_toolbar-function.
* append  icon to show booking table 
  MOVE icon_employee TO ls_toolbar-icon.
    MOVE 'Show Bookings'(111TO ls_toolbar-quickinfo.
    MOVE 'Detail'(112TO ls_toolbar-text.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "handler_toolbar

  METHOD handler_user_command.
    DATA: lt_rows TYPE lvc_t_row.
    case E_UCOMM.
      WHEN 'BOOKINGS'.     "Click the button
        CALL METHOD grid1->GET_SELECTED_ROWS
          IMPORTING
            ET_INDEX_ROWS = lt_rows.
        CALL METHOD cl_gui_cfw=>flush.
        PERFORM Show_booking TABLES lt_rows.
        CALL SCREEN 120 STARTING AT 10 5.     "Call another Screen 0120
    endcase.
  ENDMETHOD.                    "handler_user_command
ENDCLASS.               "event_receiver

      三,在ALVGRID中注册事件。方法与注册double click事件类似。需要注意的是,如果是注册ToolBar事件一定要挑用一下ALVGRID的SET_TOOLBAR_INTERACTIVE方法。代码如下:

    CREATE OBJECT event_receiver.
    set HANDLER event_receiver->handler_toolbar FOR grid1.
    set HANDLER event_receiver->handler_user_command FOR grid1.
    CALL METHOD grid1->SET_TOOLBAR_INTERACTIVE.
    CALL METHOD cl_gui_cfw=>flush.

  好了,如何在ALVGRID的TOOLBAR上添加自定义Button就已经学习完了。也许有人会问,在handler_user_command事件中没有讲详细数据显示在Screen 0120上啊。这很简单,我们只是在handler_user_command中调用了No为0120的Screen,调用该屏幕后会执行该屏幕自己的PBO事件,而显示详细数据的工作就是在PBO的Module中去实现的。同样,关闭该屏幕是在PAI的Module中实现的。

  今天就到这里了,明天学习一些什么呢?到时候再说吧!︿_︿