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'(111) TO ls_toolbar-quickinfo.
MOVE 'Detail'(112) TO 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中实现的。
今天就到这里了,明天学习一些什么呢?到时候再说吧!︿_︿