PDA

Ver la Versión Completa : Seleccionar/deseleccionar fila dependiendo de un checkbox


vamp_01
02/12/10, 02:54:52
Hola amigos, necesito un poco de ayuda, tengo un ALV Grid OO y todo funciona perfecto pero ahora necesito implementar q dependiendo de un checkbox que tengo en el alv y es editable, cuando lo marque se seleccione la fila completa y cuando lo deseleccione, se desmarque....

De ante mano Gracias

ppchico
02/12/10, 08:22:49
Incluye el manejador de eventos:


*&---------------------------------------------------------------------*
*& Include ZSDPEX14_OO01 *
*&---------------------------------------------------------------------*

**----------------------------------------------------------------------
*-
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. "lcl_event_handler DEFINITION

**----------------------------------------------------------------------
*-
CLASS lcl_event_handler IMPLEMENTATION.
***---------------------------------------------------------------------

METHOD handle_data_changed.
DATA: lv_changed TYPE lvc_s_modi.

DATA: ls_stable TYPE lvc_s_stbl.

LOOP AT er_data_changed->mt_good_cells INTO lv_changed
WHERE fieldname = 'SELEC'. "Nombre del campo que selecciona

CLEAR s_datos_ub.

READ TABLE i_tabla_alv INTO s_cabecera INDEX lv_changed-row_id.

IF sy-subrc EQ 0.

IF lv_changed-value EQ c_marcado.

READ TABLE i_tabla_alv INTO s_cabecera
WITH KEY selec = c_marcado.

IF sy-subrc EQ 0.

MESSAGE text-030 TYPE c_exito DISPLAY LIKE c_error.
EXIT.

ENDIF.

ENDIF.
MOVE lv_changed-value TO s_datos_ub-selec.
MODIFY i_tabla_alv FROM s_cabecera
INDEX lv_changed-row_id
TRANSPORTING selec.
ENDIF.

ENDLOOP.


ENDMETHOD. "handle_data_changed

DATA: o_event_receiver TYPE REF TO lcl_event_handler.


Cambia I_tabla_alv por el nombre de tu tabla, SELEC por el campo donde selecciona y S_CABECERA por la estructura de cabecera de la tabla (Si tienes... sino lo quitas).


Y tras el SET_TABLE_FOR_FIRST_DISPLAY pones esto:


CALL METHOD o_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.

* Evento que captura los cambios realizados
CALL METHOD o_alv_grid->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 o_event_receiver.
SET HANDLER o_event_receiver->handle_data_changed
FOR o_alv_grid.

Ya me cuentas si te sirve!
Un Saludo,
Javier.