首先大概讲一下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