In the series of the SALV Model Table display in SAP ABAP, today we will see how to get the editable checkbox in ALV Grid. You can find all the Previous discussion at Tutorials > SALV Table Display .
To get the selectable (editable) checkbox, we need to get the specific column from the column object. After this, we need to set the cell type as IF_SALV_C_CELL_TYPE=>CHECKBOX_HOTSPOT by using the method SET_CELL_TYPE. To update the values in the checkbox, we need to handle the event LINK_CLICK. This event LINK_CLICK is triggered when we click on the hotspot enabled checkbox. In the event handler method, we need to change the value of the checkbox field and call the REFRESH method to refresh the value on the ALV.
*&---------------------------------------------------------------------*
*& SALV Table, editable checkbox
*&
*&---------------------------------------------------------------------*
REPORT zsalv_editable_checkbox.
*
*----------------------------------------------------------------------*
* CLASS lcl_report DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_report DEFINITION.
*
PUBLIC SECTION.
*
* Final output table
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
erdat TYPE erdat,
auart TYPE auart,
kunnr TYPE kunnr,
check TYPE flag,
END OF ty_vbak.
*
DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
*
* ALV reference
DATA: o_alv TYPE REF TO cl_salv_table.
*
METHODS:
* data selection
get_data,
*
* Generating output
generate_output.
*
*
ENDCLASS. "lcl_report DEFINITION
*
CLASS lcl_event_handler DEFINITION.
*
PUBLIC SECTION.
METHODS:
on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
*
ENDCLASS. "lcl_event_handler DEFINITION
*
*
START-OF-SELECTION.
DATA: lo_report TYPE REF TO lcl_report.
*
CREATE OBJECT lo_report.
*
lo_report->get_data( ).
*
lo_report->generate_output( ).
*
*----------------------------------------------------------------------*
* CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_report IMPLEMENTATION.
*
METHOD get_data.
* data selection
SELECT vbeln erdat auart kunnr
INTO TABLE t_vbak
FROM vbak
UP TO 20 ROWS.
*
ENDMETHOD. "get_data
*
*.......................................................................
METHOD generate_output.
*
* exception class
DATA: lx_msg TYPE REF TO cx_salv_msg.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = o_alv
CHANGING
t_table = t_vbak ).
CATCH cx_salv_msg INTO lx_msg.
ENDTRY.
*
*...Get all the Columns
DATA: lo_cols TYPE REF TO cl_salv_columns.
lo_cols = o_alv->get_columns( ).
*
* set the Column optimization
lo_cols->set_optimize( 'X' ).
*
*...Process individual columns
DATA: lo_column TYPE REF TO cl_salv_column_list.
*
* Change the properties of the Columns KUNNR
TRY.
lo_column ?= lo_cols->get_column( 'CHECK' ).
lo_column->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
lo_column->set_output_length( 10 ).
CATCH cx_salv_not_found. "#EC NO_HANDLER
ENDTRY.
*
* Get the event object
DATA: lo_events TYPE REF TO cl_salv_events_table.
lo_events = o_alv->get_event( ).
*
* Instantiate the event handler object
DATA: lo_event_handler TYPE REF TO lcl_event_handler.
CREATE OBJECT lo_event_handler.
*
* event handler
SET HANDLER lo_event_handler->on_link_click FOR lo_events.
*
* Displaying the ALV
* Here we will call the DISPLAY method to get the output on the screen
o_alv->display( ).
*
ENDMETHOD. "generate_output
*
ENDCLASS. "lcl_report IMPLEMENTATION
*
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
*
METHOD on_link_click.
*
* Get the value of the checkbox and set the value accordingly
* Refersh the table
FIELD-SYMBOLS: <lfa_data> LIKE LINE OF lo_report->t_vbak.
READ TABLE lo_report->t_vbak ASSIGNING <lfa_data> INDEX row.
CHECK sy-subrc IS INITIAL.
IF <lfa_data>-check IS INITIAL.
<lfa_data>-check = 'X'.
ELSE.
CLEAR <lfa_data>-check.
ENDIF.
lo_report->o_alv->refresh( ).
ENDMETHOD. "on_link_click
*
ENDCLASS. "lcl_event_handler IMPLEMENTATION
Really nice example.
Thank you very much for your posts, here and on SDN.
how to add a select all button to check all item?
Once you select items using check box, where do you handle the lines selected in the program. For example deleted document for the checked item in ALV.
Hello,
You asked:
Once you select items using check box, where do you handle the lines selected in the program. For example deleted document for the checked item in ALV.
You can handle that in the event handler method of the event LINK_CLICK e.g. on_link_click. You would know which is selected by using parameter ROW.
Regards,
Naimesh Patel
How do you save the entries that was entered in the checkbox/es?
I created a custom PF-STATUS and enabled the save button but I don't know how to put a code behind the function code 'SAVE'.
Please let me know how to do this. Thanks!