‎2007 Mar 22 8:37 AM
Hi,
My requirement is to select (selection of more than one row is achieved by the component EDIT in lvc_s_fcat) more than one row from the Basic list in SAP LIST VIEWER and upon clicking the button in the toolbar,all the selected rows should be read and displayed in the Detail list.
Could u pls help me to achieve this?
Thanks in advance.
‎2007 Mar 23 2:57 PM
hi,
check the code for <b>Toolbar button</b> event,i.e when you select a row and click on the user defined button on the toolbar,the selected row is displayed on the 2nd grid.
I hope this is what u exactly required.
<b>code</b>
CLASS LCL1 DEFINITION DEFERRED.
DATA:G_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_SPLIT TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
G_CONT1 TYPE REF TO CL_GUI_CONTAINER,
G_CONT2 TYPE REF TO CL_GUI_CONTAINER,
G_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
G_GRID2 TYPE REF TO CL_GUI_ALV_GRID,
FCAT TYPE LVC_T_FCAT,
W_FCAT TYPE LVC_S_FCAT,
OBJ TYPE REF TO LCL1,
FCAT2 TYPE LVC_T_FCAT,
W_FCAT2 TYPE LVC_S_FCAT.
TABLES:MARA.
DATA:ITAB TYPE STANDARD TABLE OF MARA,
ITAB2 TYPE STANDARD TABLE OF MARA,
WA_ITAB LIKE LINE OF ITAB.
SET SCREEN 100.
----
CLASS lcl1 DEFINITION
----
*
----
CLASS LCL1 DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
ENDCLASS. "lcl1 DEFINITION
----
CLASS lcl1 IMPLEMENTATION
----
*
----
CLASS LCL1 IMPLEMENTATION.
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'DETAIL' TO LS_TOOLBAR-FUNCTION.
MOVE 'Show selected' TO LS_TOOLBAR-QUICKINFO.
MOVE 'Detail'(112) TO LS_TOOLBAR-TEXT.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "handle_toolbar
METHOD HANDLE_USER_COMMAND.
DATA: LT_ROWS TYPE LVC_T_ROW.
CASE E_UCOMM.
WHEN 'DETAIL'.
CALL METHOD g_GRID1->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_ROWS.
perform show_selected tables lt_rows.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl1 IMPLEMENTATION
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF1'.
SELECT MATNR FROM MARA INTO CORRESPONDING FIELDS OF TABLE ITAB.
W_FCAT-COL_POS = 1.
W_FCAT-FIELDNAME = 'MATNR'.
W_FCAT-TABNAME = 'MARA'.
W_FCAT-COLTEXT = 'Material No.'.
APPEND W_FCAT TO FCAT.
CREATE OBJECT G_CONT
EXPORTING
CONTAINER_NAME = 'CUSTOM'.
CREATE OBJECT G_SPLIT
EXPORTING
PARENT = G_CONT
ROWS = 1
COLUMNS = 2.
CALL METHOD G_SPLIT->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = G_CONT1.
CALL METHOD G_SPLIT->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 2
RECEIVING
CONTAINER = G_CONT2.
CREATE OBJECT G_GRID1
EXPORTING
I_PARENT = G_CONT1.
CREATE OBJECT G_GRID2
EXPORTING
I_PARENT = G_CONT2.
CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = ITAB
IT_FIELDCATALOG = FCAT.
CREATE OBJECT OBJ.
SET HANDLER OBJ->handle_user_command FOR g_grid1.
SET HANDLER OBJ->handle_toolbar FOR g_grid1.
CALL METHOD g_grid1->set_toolbar_interactive.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD CL_GUI_CFW=>DISPATCH.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN OTHERS.
READ TABLE ITAB INTO WA_ITAB INDEX SY-TABIX.
SELECT MATNR MTART FROM MARA
INTO TABLE ITAB2
WHERE MATNR = WA_ITAB-MATNR.
CALL METHOD G_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = ITAB2
IT_FIELDCATALOG = FCAT.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Form SHOW_SELECTED
&----
text
----
-->P_LT_ROWS text
----
FORM SHOW_SELECTED TABLES p_et_index_rows
STRUCTURE lvc_s_row.
DATA: ls_selected_line LIKE lvc_s_row,
lf_row_index TYPE lvc_index.
LOOP AT p_et_index_rows INTO ls_selected_line.
lf_row_index = ls_selected_line-index.
READ TABLE itab into wa_itab INDEX lf_row_index .
select * from mara
appending table itab2
where matnr = wa_itab-matnr.
endloop.
call method g_grid2->set_table_for_first_display
changing
it_outtab = itab2
it_fieldcatalog = fcat.
ENDFORM. " SHOW_SELECTED
hope it helps
Regards
Message was edited by:
sowjanya s
‎2007 Mar 22 10:04 AM
Hi,
You can use the method cl_gui_alv_grid=>get_changed_data.
This will get you all the rows that have been edited in the grid.
The records can then be looped from teh internal table and detailed list can be displayed.
Thanks,
Rashmi.
‎2007 Mar 23 2:23 PM
hi,
check the below code,
i am displaying all the data from MARA table in 1st grid,when i doubleclick on any row,that particular record is getting displayed on the 2nd grid(side by side i placed 2 grids on the same screen)
you can select any no. of rows
<b>code</b>
class lcl1 definition deferred.
data:g_cont type ref to cl_gui_custom_container,
g_split type ref to cl_gui_splitter_container,
g_cont1 type ref to cl_gui_container,
g_cont2 type ref to cl_gui_container,
g_grid1 type ref to cl_gui_alv_grid,
g_grid2 type ref to cl_gui_alv_grid,
fcat type lvc_t_fcat,
w_fcat type lvc_s_fcat,
obj type ref to lcl1,
fcat2 type lvc_t_fcat,
w_fcat2 type lvc_s_fcat.
tables:mara.
data:itab type standard table of mara,
itab2 type standard table of mara,
wa_itab like line of itab.
set screen 100.
----
CLASS lcl1 DEFINITION
----
*
----
class lcl1 definition.
public section.
methods:dbl_clk
for event double_click
of cl_gui_alv_grid
importing e_row.
endclass. "lcl1 DEFINITION
----
CLASS lcl1 IMPLEMENTATION
----
*
----
class lcl1 implementation.
method dbl_clk.
read table itab into wa_itab index e_row-index.
select * from mara
appending table itab2
where matnr = wa_itab-matnr.
call method g_grid2->set_table_for_first_display
changing
it_outtab = itab2
it_fieldcatalog = fcat.
endmethod. "dbl_clk
endclass. "lcl1 IMPLEMENTATION
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
module status_0100 output.
set pf-status 'PF1'.
select matnr from mara into corresponding fields of table itab.
w_fcat-col_pos = 1.
w_fcat-fieldname = 'MATNR'.
w_fcat-tabname = 'MARA'.
w_fcat-coltext = 'Material No.'.
append w_fcat to fcat.
create object g_cont
exporting
container_name = 'CUSTOM'.
create object g_split
exporting
parent = g_cont
rows = 1
columns = 2.
call method g_split->get_container
exporting
row = 1
column = 1
receiving
container = g_cont1.
call method g_split->get_container
exporting
row = 1
column = 2
receiving
container = g_cont2.
create object g_grid1
exporting
i_parent = g_cont1.
create object g_grid2
exporting
i_parent = g_cont2.
call method g_grid1->set_table_for_first_display
changing
it_outtab = itab
it_fieldcatalog = fcat.
create object obj.
set handler obj->dbl_clk for g_grid1.
endmodule. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
module user_command_0100 input.
call method cl_gui_cfw=>dispatch.
case sy-ucomm.
when 'BACK'.
leave program.
when others.
read table itab into wa_itab index sy-tabix.
select matnr mtart from mara
into table itab2
where matnr = wa_itab-matnr.
call method g_grid2->set_table_for_first_display
changing
it_outtab = itab2
it_fieldcatalog = fcat.
endcase.
endmodule. " USER_COMMAND_0100 INPUT
do reward points if it helps u
Regards
Message was edited by:
sowjanya s
‎2007 Mar 23 2:57 PM
hi,
check the code for <b>Toolbar button</b> event,i.e when you select a row and click on the user defined button on the toolbar,the selected row is displayed on the 2nd grid.
I hope this is what u exactly required.
<b>code</b>
CLASS LCL1 DEFINITION DEFERRED.
DATA:G_CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_SPLIT TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
G_CONT1 TYPE REF TO CL_GUI_CONTAINER,
G_CONT2 TYPE REF TO CL_GUI_CONTAINER,
G_GRID1 TYPE REF TO CL_GUI_ALV_GRID,
G_GRID2 TYPE REF TO CL_GUI_ALV_GRID,
FCAT TYPE LVC_T_FCAT,
W_FCAT TYPE LVC_S_FCAT,
OBJ TYPE REF TO LCL1,
FCAT2 TYPE LVC_T_FCAT,
W_FCAT2 TYPE LVC_S_FCAT.
TABLES:MARA.
DATA:ITAB TYPE STANDARD TABLE OF MARA,
ITAB2 TYPE STANDARD TABLE OF MARA,
WA_ITAB LIKE LINE OF ITAB.
SET SCREEN 100.
----
CLASS lcl1 DEFINITION
----
*
----
CLASS LCL1 DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE,
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
ENDCLASS. "lcl1 DEFINITION
----
CLASS lcl1 IMPLEMENTATION
----
*
----
CLASS LCL1 IMPLEMENTATION.
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
append a separator to normal toolbar
CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
MOVE 'DETAIL' TO LS_TOOLBAR-FUNCTION.
MOVE 'Show selected' TO LS_TOOLBAR-QUICKINFO.
MOVE 'Detail'(112) TO LS_TOOLBAR-TEXT.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "handle_toolbar
METHOD HANDLE_USER_COMMAND.
DATA: LT_ROWS TYPE LVC_T_ROW.
CASE E_UCOMM.
WHEN 'DETAIL'.
CALL METHOD g_GRID1->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_ROWS.
perform show_selected tables lt_rows.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl1 IMPLEMENTATION
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF1'.
SELECT MATNR FROM MARA INTO CORRESPONDING FIELDS OF TABLE ITAB.
W_FCAT-COL_POS = 1.
W_FCAT-FIELDNAME = 'MATNR'.
W_FCAT-TABNAME = 'MARA'.
W_FCAT-COLTEXT = 'Material No.'.
APPEND W_FCAT TO FCAT.
CREATE OBJECT G_CONT
EXPORTING
CONTAINER_NAME = 'CUSTOM'.
CREATE OBJECT G_SPLIT
EXPORTING
PARENT = G_CONT
ROWS = 1
COLUMNS = 2.
CALL METHOD G_SPLIT->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = G_CONT1.
CALL METHOD G_SPLIT->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 2
RECEIVING
CONTAINER = G_CONT2.
CREATE OBJECT G_GRID1
EXPORTING
I_PARENT = G_CONT1.
CREATE OBJECT G_GRID2
EXPORTING
I_PARENT = G_CONT2.
CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = ITAB
IT_FIELDCATALOG = FCAT.
CREATE OBJECT OBJ.
SET HANDLER OBJ->handle_user_command FOR g_grid1.
SET HANDLER OBJ->handle_toolbar FOR g_grid1.
CALL METHOD g_grid1->set_toolbar_interactive.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
CALL METHOD CL_GUI_CFW=>DISPATCH.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN OTHERS.
READ TABLE ITAB INTO WA_ITAB INDEX SY-TABIX.
SELECT MATNR MTART FROM MARA
INTO TABLE ITAB2
WHERE MATNR = WA_ITAB-MATNR.
CALL METHOD G_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = ITAB2
IT_FIELDCATALOG = FCAT.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Form SHOW_SELECTED
&----
text
----
-->P_LT_ROWS text
----
FORM SHOW_SELECTED TABLES p_et_index_rows
STRUCTURE lvc_s_row.
DATA: ls_selected_line LIKE lvc_s_row,
lf_row_index TYPE lvc_index.
LOOP AT p_et_index_rows INTO ls_selected_line.
lf_row_index = ls_selected_line-index.
READ TABLE itab into wa_itab INDEX lf_row_index .
select * from mara
appending table itab2
where matnr = wa_itab-matnr.
endloop.
call method g_grid2->set_table_for_first_display
changing
it_outtab = itab2
it_fieldcatalog = fcat.
ENDFORM. " SHOW_SELECTED
hope it helps
Regards
Message was edited by:
sowjanya s