domingo, 30 de septiembre de 2012

Radiobuttons en un ALV


Para utilizar radiobuttons en un alv, se puede mostrar en una celda de ALV el dibujo de un radiobutton como icono y capturar cuando se presiona sobre el para cambiarlo por el icono del radiobutton presionado.
Ejemplo:


INCLUDE <icons>.

DATA: BEGIN OF it_alv_flight OCCURS 0,
       carrid TYPE sflight-carrid,
       connid TYPE sflight-connid,
       radio1(4),                            "Radio button
       radio2(4),
      END OF it_alv_flight.


En fieldcat:
wa_fcat-fieldname = 'RADIO2'.
wa_fcat-tabname = 'IT_ALV_FLIGHT'.
wa_fcat-seltext_l = 'RADIO2'.
  x_fieldcat-edit      = c_x.
  x_fieldcat-icon      = c_x.
  x_fieldcat-hotspot   = c_x.


A la celda asignarle de valor inicial:
x_alv-pedidos = icon_wd_radio_button_empty. "Radio no seleccionado


en creación de alv definir el evento:
  SET HANDLER lcl_event_receiver=>hotspot_click
              FOR og_grid1.


CLASS lcl_eventhandler DEFINITION.

  PUBLIC SECTION.

    CLASS-DATA:
      md_cnt    TYPE i.

    CLASS-METHODS:
      handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING
          e_row_id
          e_column_id
          es_row_no
          sender.

ENDCLASS.    


CLASS lcl_eventhandler IMPLEMENTATION.

  METHOD handle_hotspot_click.
* define local data
    FIELD-SYMBOLS:
      <ls_entry>    TYPE ty_s_sflight,
      <ld_fld>      TYPE ANY.

    READ TABLE gt_sflight ASSIGNING <ls_entry> INDEX es_row_no-row_id.
    CHECK ( <ls_entry> IS ASSIGNED ).

*   Set all radio buttons "unselected"
    <ls_entry>-button1 =  icon_wd_radio_button_empty.
    <ls_entry>-button2 =  icon_wd_radio_button_empty.
    <ls_entry>-button3 =  icon_wd_radio_button_empty.
    <ls_entry>-button4 =  icon_wd_radio_button_empty.

    ASSIGN COMPONENT e_column_id-fieldname OF STRUCTURE <ls_entry>
                                              TO <ld_fld>.
    IF ( <ld_fld> IS ASSIGNED ).
*     Set selected radio button "selected".
      <ld_fld> = icon_wd_radio_button.
    ENDIF.

*   Force PAI followed by refresh of table display in PBO
    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = 'DUMMY'
*      IMPORTING
*        RC       =
        .


  ENDMETHOD.                    "handle_hotspot_click

ENDCLASS.                    "lcl_eventhandler IMPLEMENTATION