Application Development and Automation 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: 
Read only

Selecting multiple rows in ALV

Former Member
11,453

Hi Experts,

I am using REUSE_ALV_GRID_DISPLAY FM in my program for my ALV output . I need to select multiple rows and will click a custom button on the appln toolbar. How can I know which all rows are selected? Please help.

Many Thanks,

Neeraj

1 ACCEPTED SOLUTION
Read only

venkat_o
Active Contributor
5,220

Hi,

Try this way.

<font color=blue><pre>

REPORT ztest_alv_row_selection.

DATA: BEGIN OF it_output OCCURS 0,

select TYPE c, <font color=red>"This variable stores the value when row selected.</font>

bukrs TYPE t001-bukrs,

butxt TYPE t001-butxt,

END OF it_output.

TYPE-POOLS:slis.

DATA:it_events TYPE STANDARD TABLE OF slis_alv_event,

it_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv,

wa_fieldcat TYPE slis_fieldcat_alv,

wa_events TYPE slis_alv_event,

wa_layout TYPE slis_layout_alv.

DATA:g_program TYPE sy-repid VALUE sy-repid.

START-OF-SELECTION.

SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 100 ROWS.

DEFINE fieldcatalog.

wa_fieldcat-fieldname = &1.

wa_fieldcat-tabname = &2.

wa_fieldcat-seltext_l = &3.

append wa_fieldcat to it_fieldcat.

clear wa_fieldcat.

END-OF-DEFINITION.

fieldcatalog: "Column table col text

'BUKRS' 'IT_OUTPUT' 'BUKRS',

'BUTXT' 'IT_OUTPUT' 'BUTXT'.

wa_layout-box_fieldname = 'SELECT'. <font color=red> "This has to be set to get selection</font>

wa_layout-colwidth_optimize = 'X'.

wa_events-name = 'PF_STATUS_SET'.

wa_events-form = 'PF_STATUS_SET'.

APPEND wa_events TO it_events.

CLEAR wa_events.

wa_events-name = 'USER_COMMAND'.

wa_events-form = 'USER_COMMAND'.

APPEND wa_events TO it_events.

CLEAR wa_events.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_program

is_layout = wa_layout

it_fieldcat = it_fieldcat

it_events = it_events

TABLES

t_outtab = it_output.

&----


*& Form PF_STATUS_SET

&----


FORM pf_status_set USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'ZTEST'.

  • 1. When you set Pf status ZTEST, standard application tools will be removed.

  • 2. Goto SE41 give program 'SAPLKKBL' and status 'STANDARD_FULLSCREEN'.

  • 3. Copy the status from those to ZTEST of our program. Now you will see all standard functions.

ENDFORM. "PF_STATUS_SET

----


  • FORM USER_COMMAND *

----


FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

  • Check function code

CASE r_ucomm.

WHEN 'DISPLAY'. "user presses SAVE

LOOP AT it_output.

IF it_output-select EQ 'X'.

  • Process records that have been selected

WRITE:/ it_output.

ENDIF.

ENDLOOP.

ENDCASE.

ENDFORM. "user_command</pre></font>

Thanks

Venkat.O

Hi,

Try this way.

<font color=blue><pre>

REPORT ztest_alv_row_selection.

DATA: BEGIN OF it_output OCCURS 0,

select TYPE c, <font color=red>"This variable stores the value when row selected.</font>

bukrs TYPE t001-bukrs,

butxt TYPE t001-butxt,

END OF it_output.

TYPE-POOLS:slis.

DATA:it_events TYPE STANDARD TABLE OF slis_alv_event,

it_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv,

wa_fieldcat TYPE slis_fieldcat_alv,

wa_events TYPE slis_alv_event,

wa_layout TYPE slis_layout_alv.

DATA:g_program TYPE sy-repid VALUE sy-repid.

START-OF-SELECTION.

SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 100 ROWS.

DEFINE fieldcatalog.

wa_fieldcat-fieldname = &1.

wa_fieldcat-tabname = &2.

wa_fieldcat-seltext_l = &3.

append wa_fieldcat to it_fieldcat.

clear wa_fieldcat.

END-OF-DEFINITION.

fieldcatalog: "Column table col text

'BUKRS' 'IT_OUTPUT' 'BUKRS',

'BUTXT' 'IT_OUTPUT' 'BUTXT'.

wa_layout-box_fieldname = 'SELECT'. <font color=red> "This has to be set to get selection</font>

wa_layout-colwidth_optimize = 'X'.

wa_events-name = 'PF_STATUS_SET'.

wa_events-form = 'PF_STATUS_SET'.

APPEND wa_events TO it_events.

CLEAR wa_events.

wa_events-name = 'USER_COMMAND'.

wa_events-form = 'USER_COMMAND'.

APPEND wa_events TO it_events.

CLEAR wa_events.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_program

is_layout = wa_layout

it_fieldcat = it_fieldcat

it_events = it_events

TABLES

t_outtab = it_output.

&----


*& Form PF_STATUS_SET

&----


FORM pf_status_set USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'ZTEST'.

  • 1. When you set Pf status ZTEST, standard application tools will be removed.

  • 2. Goto SE41 give program 'SAPLKKBL' and status 'STANDARD_FULLSCREEN'.

  • 3. Copy the status from those to ZTEST of our program. Now you will see all standard functions.

ENDFORM. "PF_STATUS_SET

----


  • FORM USER_COMMAND *

----


FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

  • Check function code

CASE r_ucomm.

WHEN 'DISPLAY'. "user presses SAVE

LOOP AT it_output.

IF it_output-select EQ 'X'.

  • Process records that have been selected

WRITE:/ it_output.

ENDIF.

ENDLOOP.

ENDCASE.

ENDFORM. "user_command</pre></font>

Thanks

Venkat.O

3 REPLIES 3
Read only

Former Member
0 Likes
5,220

Hi,

In the ALV layout use the below code.

gs_layout-box_fieldname = 'SEL'.

and pass gs_layout to the function module.

in your internal table declare another extra field SEL of type C.

When the user selects a row, 'X' would be saved in the SEL field of the internal table.

Hope this helps.

Thanks,

Harini

Read only

venkat_o
Active Contributor
5,221

Hi,

Try this way.

<font color=blue><pre>

REPORT ztest_alv_row_selection.

DATA: BEGIN OF it_output OCCURS 0,

select TYPE c, <font color=red>"This variable stores the value when row selected.</font>

bukrs TYPE t001-bukrs,

butxt TYPE t001-butxt,

END OF it_output.

TYPE-POOLS:slis.

DATA:it_events TYPE STANDARD TABLE OF slis_alv_event,

it_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv,

wa_fieldcat TYPE slis_fieldcat_alv,

wa_events TYPE slis_alv_event,

wa_layout TYPE slis_layout_alv.

DATA:g_program TYPE sy-repid VALUE sy-repid.

START-OF-SELECTION.

SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 100 ROWS.

DEFINE fieldcatalog.

wa_fieldcat-fieldname = &1.

wa_fieldcat-tabname = &2.

wa_fieldcat-seltext_l = &3.

append wa_fieldcat to it_fieldcat.

clear wa_fieldcat.

END-OF-DEFINITION.

fieldcatalog: "Column table col text

'BUKRS' 'IT_OUTPUT' 'BUKRS',

'BUTXT' 'IT_OUTPUT' 'BUTXT'.

wa_layout-box_fieldname = 'SELECT'. <font color=red> "This has to be set to get selection</font>

wa_layout-colwidth_optimize = 'X'.

wa_events-name = 'PF_STATUS_SET'.

wa_events-form = 'PF_STATUS_SET'.

APPEND wa_events TO it_events.

CLEAR wa_events.

wa_events-name = 'USER_COMMAND'.

wa_events-form = 'USER_COMMAND'.

APPEND wa_events TO it_events.

CLEAR wa_events.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = g_program

is_layout = wa_layout

it_fieldcat = it_fieldcat

it_events = it_events

TABLES

t_outtab = it_output.

&----


*& Form PF_STATUS_SET

&----


FORM pf_status_set USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'ZTEST'.

  • 1. When you set Pf status ZTEST, standard application tools will be removed.

  • 2. Goto SE41 give program 'SAPLKKBL' and status 'STANDARD_FULLSCREEN'.

  • 3. Copy the status from those to ZTEST of our program. Now you will see all standard functions.

ENDFORM. "PF_STATUS_SET

----


  • FORM USER_COMMAND *

----


FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

  • Check function code

CASE r_ucomm.

WHEN 'DISPLAY'. "user presses SAVE

LOOP AT it_output.

IF it_output-select EQ 'X'.

  • Process records that have been selected

WRITE:/ it_output.

ENDIF.

ENDLOOP.

ENDCASE.

ENDFORM. "user_command</pre></font>

Thanks

Venkat.O

Read only

Former Member
0 Likes
5,220

Hi,

There is no way ALV Functionality for multiple rows selection

except using CTRL button, You can include Checkbox in the

ALV Output to select multiple rows simultaneously.

If you want to capture the how many number of rows

are selected from the ALV output, you can try using method using OOPS concept:


CALL METHOD gr_alvgrid->get_selected_rows
IMPORTING
et_row_no = lt_selected_rows .

If you want that in simple ALV output , then you have to remove the default box that comes there

and add checkbox to ur internal table, You can go through this link below:

/people/community.user/blog/2007/01/10/displaychange-mode-of-editable-fields-in-alv-using-function-modules-but-not-custom-containers

Hope it helps

Regards

Mansi