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.
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web