Tienes que declararte en el catálogo un campo checkbox:
CLEAR wa_catalogo.
wa_catalogo-fieldname = 'CHECK'.
wa_catalogo-col_pos = l_lin.
wa_catalogo-checkbox = 'X'.
wa_catalogo-outputlen = 2.
wa_catalogo-edit = 'X'.
APPEND wa_catalogo TO catalogo.
ADD 1 TO l_lin.
Además en el layout tienes que marcar lo siguiente:
layout-no_rowmark = 'X'.
Y luego para saber cuales están marcados o no después del set_table_for_first_display añades:
CALL METHOD alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* Evento que captura los cambios realizados
CALL METHOD alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
* Instanciando el objeto que enlaza eventos y el grid
CREATE OBJECT g_event_receiver.
SET HANDLER g_event_receiver->handle_data_changed
FOR alv.
La clase lcl_event_handler es:
**----------------------------------------------------------------------
*-
CLASS lcl_event_handler DEFINITION.
***---------------------------------------------------------------------
PUBLIC SECTION.
METHODS: handle_data_changed FOR EVENT data_changed OF
cl_gui_alv_grid IMPORTING er_data_changed.
ENDCLASS.
**----------------------------------------------------------------------
*-
CLASS lcl_event_handler IMPLEMENTATION.
***---------------------------------------------------------------------
METHOD handle_data_changed.
DATA: lv_changed TYPE lvc_s_modi.
LOOP AT er_data_changed->mt_good_cells INTO lv_changed
WHERE fieldname = 'CHECK'.
clear wa_etiquetas.
READ TABLE it_etiquetas INTO wa_etiquetas INDEX lv_changed-row_id.
IF sy-subrc = 0.
MOVE lv_changed-value TO wa_etiquetas-check.
MODIFY it_etiquetas FROM wa_etiquetas INDEX lv_changed-row_id.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
Espero que te sirva de algo.
Saludos
|