ABAP 构建一个弹出式窗口,其中包含单选按钮

效果如图:



CODE:

REPORT  z_wuwei_0010.
TYPE-POOLS: slis.
INCLUDE <icons>.

TYPES: BEGIN OF itype_alv_flight,
         radio1(4),                            "Radio button
         carrid TYPE sflight-carrid,
         connid TYPE sflight-connid,
       END OF itype_alv_flight.

CLASS lcl_handle_events DEFINITION DEFERRED.
DATA: gr_table   TYPE REF TO cl_salv_table.
DATA: gr_container TYPE REF TO cl_gui_custom_container.
DATA: gr_events TYPE REF TO lcl_handle_events.
DATA: it_alv_flight TYPE STANDARD TABLE OF itype_alv_flight.
*---------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS:
      on_link_click FOR EVENT link_click OF cl_salv_events_table
        IMPORTING row column.
ENDCLASS.         "lcl_handle_events DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
  METHOD on_link_click.
    PERFORM user_command USING row column.
  ENDMETHOD.                    "on_single_click
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

SELECTION-SCREEN BEGIN OF BLOCK dsp WITH FRAME.
SELECTION-SCREEN END OF BLOCK dsp.
*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*

START-OF-SELECTION.
  FIELD-SYMBOLS: <fs_grid> TYPE itype_alv_flight.
  SELECT carrid connid FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE it_alv_flight
  UP TO 20 ROWS.


  LOOP AT it_alv_flight ASSIGNING <fs_grid>.
    <fs_grid>-radio1 = icon_wd_radio_button_empty.  "Empty Radio Buttons
  ENDLOOP.

  TRY.
      cl_salv_table=>factory(
        EXPORTING
          list_display   = 'X'
        IMPORTING
          r_salv_table   = gr_table
        CHANGING
          t_table        = it_alv_flight ).
    CATCH cx_salv_msg.                                  "#EC NO_HANDLER
  ENDTRY.

  TRY.
      gr_table->set_screen_popup(
        start_column = 10
        end_column = 60
        start_line = 4
        end_line = 15 ).
    CATCH cx_salv_msg.
  ENDTRY.

*   set icon column and make it a hotspot

  DATA: lr_columns TYPE REF TO cl_salv_columns,
        lr_column  TYPE REF TO cl_salv_column_table.
        lr_columns = gr_table->get_columns( ).

  TRY.

      lr_column ?= lr_columns->get_column( 'RADIO1' ).
      lr_column->set_icon( if_salv_c_bool_sap=>true ).
      lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
      lr_column->set_long_text( text-001 ).
    CATCH cx_salv_not_found.                            "#EC NO_HANDLER

  ENDTRY.

*  turn off front-end handler
  DATA: lr_selections TYPE REF TO cl_salv_selections.
  lr_selections = gr_table->get_selections( ).
  lr_selections->set_selection_mode( if_salv_c_selection_mode=>none ).
*  capture events
  DATA: lr_events TYPE REF TO cl_salv_events_table.
  lr_events = gr_table->get_event( ).
  CREATE OBJECT gr_events.
  SET HANDLER gr_events->on_link_click FOR lr_events.
*   display the table

  gr_table->display( ).

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->ROW        text
*      -->COLUMN     text
*----------------------------------------------------------------------*
FORM user_command USING row TYPE i
                        column TYPE lvc_fname.
  DATA: refr_stable TYPE lvc_s_stbl.
  FIELD-SYMBOLS: <fs_itab> LIKE LINE OF it_alv_flight.
  IF column = 'RADIO1'.
    LOOP AT it_alv_flight ASSIGNING <fs_itab>.
      IF sy-tabix <> row.
        <fs_itab>-radio1 = icon_wd_radio_button_empty.
      ENDIF.

    ENDLOOP.

    READ TABLE it_alv_flight INDEX row ASSIGNING <fs_itab>.
    IF <fs_itab>-radio1 = icon_radiobutton.
    ELSE.
      <fs_itab>-radio1 = icon_radiobutton.
    ENDIF.

  ENDIF.
  refr_stable-row = abap_true.
  gr_table->refresh( s_stable = refr_stable refresh_mode = if_salv_c_refresh=>full ).

ENDFORM.                    "USER_COMMAND


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值