Seleccionar/deseleccionar fila dependiendo de un checkbox

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • vamp_01
    Senior Member
    • jun
    • 109

    #1

    Seleccionar/deseleccionar fila dependiendo de un checkbox

    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
    Senior Member
    • oct
    • 144

    #2
    Incluye el manejador de eventos:

    Código:
    *&---------------------------------------------------------------------*
    *&  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:
    Código:
    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.

    Comentario

    Trabajando...