*&---------------------------------------------------------------------*
*& Report ZALV_TEMPLATE_TEST *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
DATA: grid
TYPE REF TO cl_gui_alv_grid
, ccontainer TYPE REF TO cl_gui_custom_container,
gs_layout TYPE lvc_s_layo,
ls_fcat TYPE TABLE OF lvc_s_fcat WITH HEADER LINE.
DATA okcode
TYPE sy
-ucomm
.
DATA gstr
TYPE rstrucinfo
OCCURS 0 WITH HEADER LINE.
DATA sflight
TYPE sflight
OCCURS 0 WITH HEADER LINE.
*---------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler
DEFINITION . PUBLIC SECTION .
*--To add new functional buttons to the ALV toolbar
* handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
* IMPORTING e_object e_interactive ,
*--To implement user commands
* handle_user_command
* FOR EVENT user_command OF cl_gui_alv_grid
* IMPORTING e_ucomm ,
*--Double-click control
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
PRIVATE SECTION.
*---------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler
IMPLEMENTATION . *--Handle Toolbar
*METHOD handle_toolbar.
*PERFORM handle_toolbar USING e_object e_interactive .
*ENDMETHOD .
*--Handle Hotspot Click
* METHOD handle_hotspot_click .
* PERFORM handle_hotspot_click USING e_row_id e_column_id es_row_no.
* ENDMETHOD . "handle_hotspot_click
*--Handle Double Click
PERFORM handle_double_click
USING e_row e_column es_row_no
. *--Handle User Command
*METHOD handle_user_command .
*PERFORM handle_user_command USING e_ucomm .
*ENDMETHOD.
ENDCLASS. "lcl_event_handler IMPLEMENTATION
DATA gr_event_handler
TYPE REF TO lcl_event_handler
.
SELECT * FROM sflight
APPENDING TABLE sflight
.
* When structure get the components
CALL FUNCTION 'GET_COMPONENT_LIST'
EXPORTING
fieldname = 'SFLIGHT'
components = gstr.
ls_fcat-tabname = 'SFLIGHT'.
ls_fcat-fieldname = gstr-compname.
* ls_fcat-inttype = 'C'.
ls_fcat-inttype = gstr-type.
ls_fcat-intlen = gstr-leng.
ls_fcat-coltext = gstr-compname.
* LS_FCAT-HOTSPOT = 'X'.
** ls_fcat-scrtext_s = ls_fcat-fieldname.
** ls_fcat-scrtext_m = ls_fcat-fieldname.
** ls_fcat-scrtext_l = ls_fcat-fieldname.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
IF ccontainer
IS INITIAL.
CREATE OBJECT ccontainer
EXPORTING container_name = 'CONT1'.
CREATE OBJECT grid
EXPORTING i_parent = ccontainer.
*--Creating an instance for the event handler
CREATE OBJECT gr_event_handler .
* PERFORM GETGRID.
gs_layout-cwidth_opt = 'X'.
CALL METHOD grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
CHANGING
it_outtab = sflight[]
it_fieldcatalog = ls_fcat[].
*--Registering handler methods to handle ALV Grid events
SET HANDLER gr_event_handler->handle_double_click FOR grid .
SET PF-STATUS 'STAT'.
SET TITLEBAR 'S1'.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100
INPUT.
*&--------------------------------------------------------------------*
*& Form destruct
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
IF NOT ccontainer
IS INITIAL. CALL METHOD ccontainer
->free.
*&--------------------------------------------------------------------*
*& Form handle_hotspot_click
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* -->E_ROW_ID text
* -->E_COLUMN_IDtext
* -->ES_ROW_NO text
*---------------------------------------------------------------------*
FORM handle_double_click
USING e_row e_column es_row_no
. DATA lv_stable
TYPE lvc_s_stbl
.
lv_stable-row = 'X'.
CALL METHOD grid->refresh_table_display
EXPORTING
is_stable = lv_stable
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2 .