Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Using double click event in ALV Grid

Former Member
0 Kudos

Hi All,

I am developing an Interactive ALV report using object oriented programming. I m getting the following runtime error. Kindly help me.

In the 'Set Handler.. for source the reference to the trigger 'GRID1' may not be 'NULL'.

With Regards

Vasu

16 REPLIES 16

Former Member
0 Kudos

Hi Vasu,

Have you created an object of CL_GUI_ALV_GRID by using the statement

CREATE Object GRID1

EXPORTING

..

..

EXCEPTION

..

.

<b>Also have you created an object of the local class for handling the double click event...?</b>

I think you haven't done that.Do that using the statement

CREATE OBJECT local_class.

For eg: you are creating a local class like

class local_class definition.

methods:

handle_dbl_click for event ......

endclass.

class local_class implementation.

method handle_dbl_click.

endmethod.

endclass.

In the main program, before calling the SET HANDLER statement , you have to create an instance of this class.

DATA: loc_class type ref to LOCAL_CLASS.

DATA: grid type ref to CL_GUI_ALV_GRID.

you go ahead with creating the ALV grid.

Now do these steps.

create object loc_class.

SET HANDLER loc_class->handle_dbl_click for grid.

This will work.

<b>Close the thread once the problem is resolved.</b>

Regards,

SP.

0 Kudos

hi,

compare samples in se38-reuse library

e.g: report <b>BCALV_GRID_03</b>

A.

0 Kudos

Hi SP,

Here is my logic, i have implemented your suggestion but still I m getting same runtime error.

REPORT ZVASU_ALVGRID_INTERACTIVE .

          • tables dec

TABLES: KNA1,VBAK.

          • to handle the user action events like double click

          • definition class is defined later in the program

CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.

***********

DATA: BEGIN OF T_KNA1 OCCURS 0.

INCLUDE STRUCTURE KNA1.

DATA: END OF T_KNA1.

*************

DATA: BEGIN OF T_VBAK OCCURS 0.

INCLUDE STRUCTURE VBAK.

DATA: END OF T_VBAK.

**************

DATA: GRID TYPE REF TO CL_GUI_ALV_GRID,

G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

GT_FIELDCAT TYPE LVC_T_FCAT, " fcat for basic alv screen (customers)

GS_LAYOUT TYPE LVC_S_LAYO,

CONT_ON_MAIN TYPE SCRFNAME VALUE 'CCCONTAINER',

EVENT_RECIEVER TYPE REF TO LCL_EVENT_RECEIVER.

**********

DATA: GRID1 TYPE REF TO CL_GUI_ALV_GRID,

G_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

GT_FIELDCAT1 TYPE LVC_T_FCAT,

CONT_ON_DIALOG TYPE SCRFNAME VALUE 'CCCONTAINER1',

EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,

GS_LAYOUT1 TYPE LVC_S_LAYO.

***&&&&&&&&&&&&&

CALL SCREEN '100'.

**********************

CLASS LCL_EVENT_RECEIVER DEFINITION. " class definition begininning

PUBLIC SECTION.

METHODS:

      • method to handle double click - when an user double clicks we get two values;

      • 1 - e_row and the e_column

HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW E_COLUMN.

ENDCLASS.

*********************

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

METHOD HANDLE_DOUBLE_CLICK.

DATA: L_KNA1 LIKE LINE OF T_KNA1.

READ TABLE T_KNA1 INDEX E_ROW-INDEX INTO L_KNA1.

SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE T_VBAK UP TO 10 ROWS WHERE KUNNR = L_KNA1-KUNNR .

              • the screen for priniting vendor data in secondary alv list`

CALL SCREEN 101 STARTING AT 10 5.

ENDMETHOD.

ENDCLASS.

FORM EXIT_PROGRAM.

CALL METHOD G_CUSTOM_CONTAINER->FREE.

IF NOT G_CUSTOM_CONTAINER1 IS INITIAL.

CALL METHOD G_CUSTOM_CONTAINER1->FREE.

ENDIF.

CALL METHOD CL_GUI_CFW=>FLUSH.

IF SY-SUBRC EQ 0.

LEAVE PROGRAM.

ENDIF.

ENDFORM.

&----


*& Module CUST_ALV_DISP_PBO OUTPUT

&----


  • text

----


module CUST_ALV_DISP_PBO output. " for screen 100

IF G_CUSTOM_CONTAINER IS INITIAL.

SELECT * FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE T_KNA1 UP TO 10 ROWS.

  • PERFORM PREPARE_FCAT_KNA1 CHANGING GT_FIELDCAT.

CREATE OBJECT G_CUSTOM_CONTAINER " creating an custom container control for basic alv

EXPORTING CONTAINER_NAME = CONT_ON_MAIN.

CREATE OBJECT GRID " creating an instance of ALV control

EXPORTING I_PARENT = G_CUSTOM_CONTAINER.

GS_LAYOUT-GRID_TITLE = 'CUSTOMERS INFORMATION SCREEN'.

CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING I_STRUCTURE_NAME = 'KNA1'

CHANGING IT_OUTTAB = T_KNA1[].

    • object created to receive events and linked them to handler methods

CREATE OBJECT EVENT_RECIEVER.

SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR GRID1.

ENDIF.

CALL METHOD CL_GUI_CONTROL=>SET_FOCUS EXPORTING CONTROL = GRID1.

endmodule. " CUST_ALV_DISP_PBO OUTPUT

&----


*& Module USER_PF_STATUS OUTPUT

&----


  • to set the user defined pf-status for basic alv - screen 100

----


module USER_PF_STATUS output.

SET PF-STATUS 'ZPF_STATUS_KNA1_100'.

endmodule. " USER_PF_STATUS OUTPUT

&----


*& Module ALV_VENDOR_DISP_PBO OUTPUT

&----


  • text

----


module ALV_VENDOR_DISP_PBO output. "for screen 101

IF G_CUSTOM_CONTAINER1 IS INITIAL.

CREATE OBJECT G_CUSTOM_CONTAINER1

EXPORTING CONTAINER_NAME = CONT_ON_DIALOG.

CREATE OBJECT GRID1

EXPORTING I_PARENT = G_CUSTOM_CONTAINER1.

CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING I_STRUCTURE_NAME = 'VBAK'

CHANGING IT_OUTTAB = T_VBAK[].

ENDIF.

endmodule. " ALV_VENDOR_DISP_PBO OUTPUT

&----


*& Module USER_CLICK INPUT

&----


  • text

----


module USER_CLICK input. " for screen 100

CASE SY-UCOMM.

WHEN 'EXIT'.

PERFORM EXIT_PROGRAM.

ENDCASE.

endmodule. " USER_CLICK INPUT

&----


*& Module USER_AFTER_CLICKED INPUT

&----


  • text

----


module USER_AFTER_CLICKED input. " for screen 101

CASE SY-UCOMM.

WHEN 'BACK'.

LEAVE TO SCREEN 100.

WHEN 'EXIT'.

LEAVE PROGRAM.

ENDCASE.

endmodule. " USER_AFTER_CLICKED INPUT

With Regards

Vasu

0 Kudos

Hi Vasu,

I don't know if it is a spelling mistake..

But in the SET HANDLER statement, you are stating

SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR <b>GRID1</b>...

But GRID1 has not been instantiated.Only GRID has been instantiated.Just give

SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR <b>GRID</b>.

You can go through this document for reference.

http://esnips.com/doc/2d953590-e8c5-490c-a607-d1ab7cf517d7/ALV.pdf

Regards,

SP.

0 Kudos

Hi SP,

GRID1 I have instantiated in module ALV_VENDOR_DISP_PBO output. "for screen 101

This is the instance for secondary ALV.

With Regards

Vasu

0 Kudos

Not sure where you double click functionality is to reside, but you need to set the handler only after creating the ALV grid object.

So if you double click is on the GRID object, then you need to set the handler as you are doing, but not for GRID1, you need to set for GRID.



IF G_CUSTOM_CONTAINER IS INITIAL.

SELECT * FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE T_KNA1 UP TO 10 ROWS.
* PERFORM PREPARE_FCAT_KNA1 CHANGING GT_FIELDCAT.


CREATE OBJECT G_CUSTOM_CONTAINER " creating an custom container control for basic alv
EXPORTING CONTAINER_NAME = CONT_ON_MAIN.

CREATE OBJECT GRID " creating an instance of ALV control
EXPORTING I_PARENT = G_CUSTOM_CONTAINER.

GS_LAYOUT-GRID_TITLE = 'CUSTOMERS INFORMATION SCREEN'.

CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING I_STRUCTURE_NAME = 'KNA1'
CHANGING IT_OUTTAB = T_KNA1[].


** object created to receive events and linked them to handler methods
CREATE OBJECT EVENT_RECIEVER.
SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR <b>GRID</b>.

ENDIF.



Regards,

Rich Heilman

Former Member
0 Kudos

have you set the handler in the main program?

MAIN PROGRAM:

  • Create an instance for Custom Container 'ALV_GRID'

CREATE OBJECT g_custom_container

EXPORTING container_name = g_container.

  • Create an instance for ALV Grid

CREATE OBJECT g_grid

EXPORTING i_parent = g_custom_container.

  • Create object handler

CREATE OBJECT g_handler.

SET HANDLER g_handler->handle_double_click FOR g_grid.

CLASS DEFINITION:

CLASS lcl_event_handler DEFINITION.

PUBLIC SECTION.

METHODS:

  • Handler to Check the Data Change

handle_double_click FOR EVENT double_click

OF cl_gui_alv_grid.

ENDCLASS. "lcl_event_handler DEFINITION

----


  • CLASS lcl_event_handler IMPLEMENTATION

----


CLASS lcl_event_handler IMPLEMENTATION.

METHOD handle_double_click.

.....

ENDMETHOD.

ENDCLASS. "LCL_EVENT_HANDLER

  • Global Data

DATA : g_handler TYPE REF TO lcl_event_handler. "handler

Former Member
0 Kudos

HI

GOOD

CHECK OUT WITH EACH AND EVERY OBJECT THROUGH WHICH YOU R PASSING THE VALUE TO THE FIELD CATALOGE, WHEATHER THE DATA IS PASSING PROPERLY OR NOT.

THANKS

MRUTYUN

Former Member
0 Kudos

refer program : BCALV_GRID_02.

Former Member
0 Kudos

HI,

i think u have'nt registered the events for ALV...

using the set handler!!!

Hope this helps u.

Regards,

Seema.

Former Member
0 Kudos

Hi Vasu,

Your screen flow is like this(<b>correct me if I am wrong</b>) ...

When you click on the first ALV, you are calling the second ALV to perform something.

But in the PBO of screen 100, you are instantiating <b>grid</b>.. at that time <b>grid1</b> is not instantiated(still null).

Now when you call the SET HANDLER statement using <b>Grid1</b>, it is null.That is why it is showing the runtime error..

The double click event is on the first ALV(on screen 100) and not on second..

<b>So you have to use grid in both the statements used in the PBO of screen 100.</b>

ie. the statements

SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR <b>GRID1.</b>

CALL METHOD CL_GUI_CONTROL=>SET_FOCUS EXPORTING CONTROL = <b>GRID1</b>.

has to be changed to

SET HANDLER EVENT_RECIEVER->HANDLE_DOUBLE_CLICK FOR <b>GRID</b>.

CALL METHOD CL_GUI_CONTROL=>SET_FOCUS EXPORTING CONTROL = <b>GRID</b>.

Tell us if this is not your requirement.

<b>Close the thread once the problem is resolved.</b>

Regards,

SP.

Message was edited by: Sylendra Prasad

Former Member
0 Kudos

Hi Vasu,

Does your problem still persist..? You can go through this link. It has the same problem. Just see how it is solved.

<b>Close the thread once the problem is resolved.</b>

Regards,

SP.

0 Kudos

Hi SP,

I went to the url you have given in the last e-mail. I have implemented the necessary suggestions given but the same error is coming.

Here is my logic I have done to handle double_click event.

************

DATA: GRID1 TYPE REF TO CL_GUI_ALV_GRID,

G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

GT_FCAT TYPE LVC_T_FCAT,

GS_LAYOUT TYPE LVC_S_LAYO.

DATA: BEGIN OF T_KNA1 OCCURS 0.

INCLUDE STRUCTURE KNA1.

DATA: END OF T_KNA1.

DATA: OK_CODE LIKE SY-UCOMM,

REPID LIKE SY-REPID.

CLASS LCL_EVENT_HANDLER DEFINITION.

PUBLIC SECTION.

METHODS: HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID

IMPORTING E_ROW E_COLUMN.

ENDCLASS.

DATA GR_EVENT_HANDLER TYPE REF TO LCL_EVENT_HANDLER.

  • SELECT * FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE T_KNA1 UP TO 10 ROWS.

CALL SCREEN 100.

CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

METHOD HANDLE_DOUBLE_CLICK.

LEAVE PROGRAM.

ENDMETHOD.

ENDCLASS.

&----


*& Module ALV_DISPLAY_100 OUTPUT

&----


  • text

----


MODULE ALV_DISPLAY_100 OUTPUT.

SELECT * FROM KNA1 INTO CORRESPONDING FIELDS OF TABLE T_KNA1 UP TO 10 ROWS.

PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FCAT.

PERFORM PREPARE_LAYOUT CHANGING GS_LAYOUT.

CREATE OBJECT GR_EVENT_HANDLER.

SET HANDLER GR_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GRID1.

PERFORM DISPLAY_ALV.

ENDMODULE. " ALV_DISPLAY_100 OUTPUT

*CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

*

  • METHOD HANDLE_DOUBLE_CLICK.

  • LEAVE PROGRAM.

  • ENDMETHOD.

*ENDCLASS.

&----


*& Form PREPARE_FIELD_CATALOG

&----


  • text

----


  • <--P_GT_FCAT text

----


FORM PREPARE_FIELD_CATALOG CHANGING P_GT_FCAT TYPE LVC_T_FCAT.

DATA: T_FCAT TYPE LVC_S_FCAT.

T_FCAT-COL_POS = '1'.

T_FCAT-FIELDNAME = 'KUNNR'.

T_FCAT-SCRTEXT_M = 'CUST_NUM'.

APPEND T_FCAT TO GT_FCAT.

T_FCAT-COL_POS = '2'.

T_FCAT-FIELDNAME = 'NAME1'.

T_FCAT-SCRTEXT_M = 'CUST_NAME'.

APPEND T_FCAT TO GT_FCAT.

T_FCAT-COL_POS = '3'.

T_FCAT-FIELDNAME = 'LAND1'.

T_FCAT-SCRTEXT_M = 'CUST_CITY'.

APPEND T_FCAT TO GT_FCAT.

ENDFORM. " PREPARE_FIELD_CATALOG

&----


*& Form PREPARE_LAYOUT

&----


  • text

----


  • <--P_GS_LAYOUT text

----


FORM PREPARE_LAYOUT CHANGING P_GS_LAYOUT TYPE LVC_S_LAYO.

P_GS_LAYOUT-ZEBRA = 'X'.

P_GS_LAYOUT-GRID_TITLE = 'CUST_REPORT'.

ENDFORM. " PREPARE_LAYOUT

&----


*& Form DISPLAY_ALV

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DISPLAY_ALV .

IF G_CUSTOM_CONTAINER IS INITIAL.

CREATE OBJECT G_CUSTOM_CONTAINER

EXPORTING CONTAINER_NAME = 'CCCONTAINER'.

CREATE OBJECT GRID1 EXPORTING

I_PARENT = G_CUSTOM_CONTAINER.

CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

  • I_BUFFER_ACTIVE =

  • I_BYPASSING_BUFFER =

  • I_CONSISTENCY_CHECK =

  • I_STRUCTURE_NAME =

  • IS_VARIANT =

  • I_SAVE =

  • I_DEFAULT = 'X'

IS_LAYOUT = GS_LAYOUT

  • IS_PRINT =

  • IT_SPECIAL_GROUPS =

  • IT_TOOLBAR_EXCLUDING =

  • IT_HYPERLINK =

  • IT_ALV_GRAPHICS =

  • IT_EXCEPT_QINFO =

CHANGING

IT_OUTTAB = T_KNA1[]

IT_FIELDCATALOG = GT_FCAT

  • IT_SORT =

  • IT_FILTER =

  • 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.

CALL METHOD GRID1->REFRESH_TABLE_DISPLAY

  • EXPORTING

  • IS_STABLE =

  • I_SOFT_REFRESH =

EXCEPTIONS

FINISHED = 1

others = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDIF.

ENDFORM. " DISPLAY_ALV

&----


*& Module USER_AFTER_CLICK_100 INPUT

&----


  • text

----


MODULE USER_AFTER_CLICK_100 INPUT.

CASE SY-UCOMM.

WHEN 'EXIT'.

LEAVE PROGRAM.

ENDCASE.

ENDMODULE. " USER_AFTER_CLICK_100 INPUT

With Regards

Vasu

0 Kudos

Hi Vasu,

From what I could understand from the code that you have given, the same mistake you are committing again..

<b>CREATE OBJECT GR_EVENT_HANDLER.

SET HANDLER GR_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GRID1.

PERFORM DISPLAY_ALV.</b>

grid1 is again NULL when

SET HANDLER statement is executed.

Because grid1 is instantiated only in the subroutine <b>DISPLAY_ALV</b>. So you have to call the subroutine before calling the SET HANDLER Statement.

SO the change you have to do is

<b>PERFORM DISPLAY_ALV.

CREATE OBJECT GR_EVENT_HANDLER.

SET HANDLER GR_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR GRID1.</b>

Also the <b>REFRESH_TABLE_DISPLAY</b> method is to be called whenever the changes that you have made to ALV have to reflected. So call the method only if the container is not initial.

if container_name is initial

else.

call method grid1->refresh_table_display

exporting

..

..

.

endif.

Hope your problem will be solved.

<b>Close the thread once it is done.</b>

Regards,

SP.

<b>Is your problem solved...?</b>

0 Kudos

Hi Vasu,

Is your problem solved...?

I have one information to pass on to you.

Whenever a method or a function Module is called, uncomment all types of exceptions specified in the EXCEPTION section of parameter interface.

For eg:

CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

  • I_BUFFER_ACTIVE =

  • I_BYPASSING_BUFFER =

  • I_CONSISTENCY_CHECK =

  • I_STRUCTURE_NAME =

  • IS_VARIANT =

  • I_SAVE =

  • I_DEFAULT = 'X'

IS_LAYOUT = GS_LAYOUT

  • IS_PRINT =

  • IT_SPECIAL_GROUPS =

  • IT_TOOLBAR_EXCLUDING =

  • IT_HYPERLINK =

  • IT_ALV_GRAPHICS =

  • IT_EXCEPT_QINFO =

CHANGING

IT_OUTTAB = T_KNA1[]

IT_FIELDCATALOG = GT_FCAT

  • IT_SORT =

  • IT_FILTER =

  • EXCEPTIONS

  • INVALID_PARAMETER_COMBINATION = 1

  • PROGRAM_ERROR = 2

  • TOO_MANY_LINES = 3

  • others = 4

In this case, uncomment all the exceptions like

INVALID_PARAMETER_COMBINATION , PROGRAM_ERROR, TOO_MANY_LINE, others.

So we can check the value of sy-subrc and check what kind of an error is happening.

It may remove the occurence of runtime errors...

So the above method call should be modified as

CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

  • I_BUFFER_ACTIVE =

  • I_BYPASSING_BUFFER =

  • I_CONSISTENCY_CHECK =

  • I_STRUCTURE_NAME =

  • IS_VARIANT =

  • I_SAVE =

  • I_DEFAULT = 'X'

IS_LAYOUT = GS_LAYOUT

  • IS_PRINT =

  • IT_SPECIAL_GROUPS =

  • IT_TOOLBAR_EXCLUDING =

  • IT_HYPERLINK =

  • IT_ALV_GRAPHICS =

  • IT_EXCEPT_QINFO =

CHANGING

IT_OUTTAB = T_KNA1[]

IT_FIELDCATALOG = GT_FCAT

  • IT_SORT =

  • IT_FILTER =

<b>EXCEPTIONS

INVALID_PARAMETER_COMBINATION = 1

PROGRAM_ERROR = 2

TOO_MANY_LINES = 3

others = 4</b>.

<b>Close the thread once the problem is solved.</b>

Regards,

SP.

former_member188685
Active Contributor
0 Kudos

Hi,

check this sample, here i implemented the Double click event, it works fine for me.

REPORT  ZTEST_ALV   MESSAGE-ID ZZ                           .
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID,  "First
      G_GRID1 TYPE REF TO CL_GUI_ALV_GRID. "Second
DATA: L_VALID TYPE C,
      V_FLAG,
      V_DATA_CHANGE,
      V_ROW TYPE LVC_S_ROW,
      V_COLUMN TYPE LVC_S_COL,
      V_ROW_NUM TYPE LVC_S_ROID.
DATA: OK_CODE LIKE SY-UCOMM,
      SAVE_OK LIKE SY-UCOMM,
      G_CONTAINER1 TYPE SCRFNAME VALUE 'TEST', "First Container
      G_CONTAINER2 TYPE SCRFNAME VALUE 'TEST1',"Second container
      GS_LAYOUT TYPE LVC_S_LAYO.

DATA:BEGIN OF  ITAB OCCURS 0,
     VBELN LIKE LIKP-VBELN,
     POSNR LIKE LIPS-POSNR,
     LFDAT like lips-vfdat,
     BOX(1),
     HANDLE_STYLE TYPE LVC_T_STYL,
     END OF ITAB.

*---------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION .
  PUBLIC SECTION .
    METHODS:
**Hot spot Handler
    HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
                      IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,
**Handler to Check the Data Change
    HANDLE_DATA_CHANGED FOR EVENT DATA_CHANGED
                         OF CL_GUI_ALV_GRID
                         IMPORTING ER_DATA_CHANGED
                                   E_ONF4
                                   E_ONF4_BEFORE
                                   E_ONF4_AFTER,
**Double Click Handler
    HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
                                     IMPORTING E_ROW E_COLUMN ES_ROW_NO.


ENDCLASS.                    "lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*Handle Hotspot Click
  METHOD HANDLE_HOTSPOT_CLICK .
    CLEAR: V_ROW,V_COLUMN,V_ROW_NUM.
    V_ROW  = E_ROW_ID.
    V_COLUMN = E_COLUMN_ID.
    V_ROW_NUM = ES_ROW_NO.
    MESSAGE I000 WITH V_ROW 'clicked'.
  ENDMETHOD.                    "lcl_event_handler

*Handle Double Click
  METHOD  HANDLE_DOUBLE_CLICK.
    CLEAR: V_ROW,V_COLUMN,V_ROW_NUM.
    V_ROW  = E_ROW.
    V_COLUMN = E_COLUMN.
    V_ROW_NUM = ES_ROW_NO.

    IF E_COLUMN = 'VBELN'.
      SET PARAMETER ID 'VL' FIELD ITAB-VBELN.
      CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.

    ENDIF.
    IF E_COLUMN = 'POSNR'.

      MESSAGE I000 WITH 'Click on POSNR row number '  E_ROW.
      "with this row num you can get the data
    ENDIF.
  ENDMETHOD.                    "handle_double_click
**Handle Data Change
  METHOD HANDLE_DATA_CHANGED.
  data:stable type LVC_S_STBL.
  stable-row = 'X'.
  stable-col = 'X'.
call method g_grid->refresh_table_display
  EXPORTING
    IS_STABLE      =  stable
  EXCEPTIONS
    FINISHED       = 1
    others         = 2
        .
if sy-subrc <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.

  ENDMETHOD.                    "HANDLE_DATA_CHANGED
ENDCLASS.                    "LCL_EVENT_HANDLER IMPLEMENTATION

*&---------------------------------------------------------------------*
*&             Global Definitions
*&---------------------------------------------------------------------*
DATA:      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"Container1
            G_HANDLER TYPE REF TO LCL_EVENT_HANDLER, "handler
            G_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER. "Container2



*- Fieldcatalog for First and second Report
DATA: IT_FIELDCAT  TYPE  LVC_T_FCAT,
      X_FIELDCAT TYPE LVC_S_FCAT,
      LS_VARI  TYPE DISVARIANT.

*---------------------------------------------------------------------
*                START-OF_SELECTION
*---------------------------------------------------------------------
START-OF-SELECTION.

  SELECT VBELN
         POSNR
         FROM LIPS
         UP TO 20 ROWS
         INTO CORRESPONDING FIELDS OF TABLE ITAB.

END-OF-SELECTION.
  IF NOT ITAB[] IS INITIAL.
    CALL SCREEN 100.
  ELSE.
    MESSAGE I002 WITH 'NO DATA FOR THE SELECTION'(004).
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CREATE_AND_INIT_ALV .
  DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
"First Grid
  CREATE OBJECT G_CUSTOM_CONTAINER
         EXPORTING CONTAINER_NAME = G_CONTAINER1.
  CREATE OBJECT G_GRID
         EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
"Second Grid
  CREATE OBJECT G_CUSTOM_CONTAINER1
         EXPORTING CONTAINER_NAME = G_CONTAINER2.
  CREATE OBJECT G_GRID1
         EXPORTING I_PARENT = G_CUSTOM_CONTAINER1.

* Set a titlebar for the grid control
  CLEAR GS_LAYOUT.
  GS_LAYOUT-GRID_TITLE = TEXT-003.
  GS_LAYOUT-ZEBRA = SPACE.
  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-NO_ROWMARK = 'X'.
  GS_LAYOUT-BOX_FNAME = 'BOX'.
  GS_LAYOUT-CTAB_FNAME = 'CELLCOLOR'.
  GS_LAYOUT-STYLEFNAME = 'HANDLE_STYLE'.
  CALL METHOD G_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
  CREATE OBJECT G_HANDLER.
  SET HANDLER G_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID.
*  SET HANDLER G_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID.
  SET HANDLER G_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID.
data: ls_outatb like line of itab,
      v_index type sy-tabix.
 DATA: LS_EDIT TYPE LVC_S_STYL,
        LT_EDIT TYPE LVC_T_STYL.

LOOP AT ITAB INTO ls_outatb WHERE POSNR = '000010'.
    V_INDEX = SY-TABIX.
    LS_EDIT-FIELDNAME = 'VBELN'.
    LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
    LS_EDIT-STYLE2 = SPACE.
    LS_EDIT-STYLE3 = SPACE.
    LS_EDIT-STYLE4 = SPACE.
    LS_EDIT-MAXLEN = 8.
    INSERT LS_EDIT INTO TABLE LT_EDIT.
    INSERT LINES OF LT_EDIT INTO TABLE ls_outatb-handle_style.
    MODIFY ITAB INDEX V_INDEX FROM ls_outatb  TRANSPORTING
                                      HANDLE_STYLE.
  ENDLOOP.


* setting focus for created grid control
  CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
    EXPORTING
      CONTROL = G_GRID.
* Build fieldcat and set editable for date and reason code
* edit enabled. Assign a handle for the dropdown listbox.
  PERFORM BUILD_FIELDCAT.
* Optionally restrict generic functions to 'change only'.
*   (The user shall not be able to add new lines).
  PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
**Vaiant to save the layout
  LS_VARI-REPORT      = SY-REPID.
  LS_VARI-HANDLE      = SPACE.
  LS_VARI-LOG_GROUP   = SPACE.
  LS_VARI-USERNAME    = SPACE.
  LS_VARI-VARIANT     = SPACE.
  LS_VARI-TEXT        = SPACE.
  LS_VARI-DEPENDVARS  = SPACE.

  CALL METHOD G_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

**Calling the Method for ALV output for First Grid
  CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
      IS_VARIANT           = LS_VARI
      IS_LAYOUT            = GS_LAYOUT
      I_SAVE               = 'A'
    CHANGING
      IT_FIELDCATALOG      = IT_FIELDCAT
      IT_OUTTAB            = ITAB[].
**Calling the Method for ALV output for Second Grid
   CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
*    EXPORTING
*      IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
    CHANGING
      IT_FIELDCATALOG      = IT_FIELDCAT
      IT_OUTTAB            = ITAB[].

* Set editable cells to ready for input initially
  CALL METHOD G_GRID->SET_READY_FOR_INPUT
    EXPORTING
      I_READY_FOR_INPUT = 1.

ENDFORM.                               "CREATE_AND_INIT_ALV
*&---------------------------------------------------------------------*
*&      Form  EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_EXCLUDE text
*----------------------------------------------------------------------*
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
* Only allow to change data not to create new entries (exclude
* generic functions).
  DATA LS_EXCLUDE TYPE UI_FUNC.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
ENDFORM.                               " EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*&      Form  build_fieldcat
*&---------------------------------------------------------------------*
*       Fieldcatalog
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT .
  DATA: L_POS TYPE I.
  L_POS = L_POS + 1.


  X_FIELDCAT-SCRTEXT_M = 'Delivery'(024).
  X_FIELDCAT-FIELDNAME = 'VBELN'.
  X_FIELDCAT-TABNAME = 'ITAB'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-NO_ZERO    = 'X'.
  X_FIELDCAT-EDIT      = 'X'.
  X_FIELDCAT-OUTPUTLEN = '10'.

  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SCRTEXT_M = 'Item'(025).
  X_FIELDCAT-FIELDNAME = 'POSNR'.
  X_FIELDCAT-TABNAME = 'ITAB'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '5'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
    L_POS = L_POS + 1.
    X_FIELDCAT-SCRTEXT_M = 'Del Date'(015).
  X_FIELDCAT-FIELDNAME = 'LFDAT'.
  X_FIELDCAT-TABNAME = 'ITAB'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.
ENDFORM.                    " build_fieldcat
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAIN100'.
  IF G_CUSTOM_CONTAINER IS INITIAL.
**Initializing the grid and calling the fm to Display the O/P
    PERFORM CREATE_AND_INIT_ALV.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  CASE SY-UCOMM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT

Regards

vijay