REUSE_ALV_GRID_DISPLAY_LVC]-显示单选按钮(radio button)

这篇博客详细介绍了如何在ABAP中使用REUSE_ALV_GRID_DISPLAY_LVC函数来显示ALV表格,并通过定义事件接收器LCL_EVENT_RECEIVER处理用户交互,如点击事件,实现单元格内Radio按钮的选中状态切换。此外,还展示了如何注册回车和编辑事件,以及刷新表格显示的方法。
摘要由CSDN通过智能技术生成

REPORT ztest_alv_radiobutton.

TYPE-POOLS:abap, slis.

DATA: BEGIN OF gt_list OCCURS 0,
        sel TYPE char4,
        val TYPE i,
      END OF gt_list.

DATA: go_alv_grid TYPE REF TO cl_gui_alv_grid.
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
*     hotspot事件
      hotspot_click
                    FOR EVENT hotspot_click OF cl_gui_alv_grid
        IMPORTING e_row_id
                    e_column_id
                    es_row_no.
ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
*& CLASS LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
  METHOD hotspot_click.
    DATA: ls_list LIKE gt_list.
    CLEAR ls_list.
    READ TABLE gt_list INTO ls_list INDEX e_row_id.
    IF gt_list-sel NE '@TB@'.
      ls_list-sel = '@SR@'."radio button选中的图标
      MODIFY gt_list FROM ls_list TRANSPORTING sel WHERE sel NE '@SR@'.
      ls_list-sel = '@TB@'."没有选中radio button的图标
      MODIFY gt_list FROM ls_list INDEX e_row_id TRANSPORTING sel .
    ENDIF.
    PERFORM frm_ref_alv.
  ENDMETHOD.                    "HANDLE_ONF4
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION
*&---------------------------------------------------------------------*
*&      START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_dsp_data.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
FORM frm_get_data .
  DO 10 TIMES.
    IF sy-index = 1.
      gt_list-sel = '@TB@'.
    ELSE.
      gt_list-sel = '@SR@'.
    ENDIF.
    gt_list-val = sy-index.
    APPEND gt_list.
  ENDDO.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DSP_DATA
*&---------------------------------------------------------------------*
FORM frm_dsp_data .
  DATA: ls_layo  TYPE lvc_s_layo,
        lt_fcat  TYPE lvc_t_fcat,
        ls_fcat  TYPE lvc_s_fcat,
        lt_event TYPE slis_t_event,
        ls_event TYPE slis_alv_event.
  ls_layo-zebra      = abap_true.
  ls_layo-cwidth_opt = abap_true.
  ls_fcat-fieldname = 'SEL'.
  ls_fcat-hotspot = 'X'.
  ls_fcat-scrtext_l =
  ls_fcat-scrtext_m =
  ls_fcat-scrtext_s = '选择'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_fcat-fieldname = 'VAL'.
  ls_fcat-scrtext_l =
  ls_fcat-scrtext_m =
  ls_fcat-scrtext_s = '值'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR ls_fcat.
  ls_event-name = slis_ev_caller_exit_at_start.
  ls_event-form = slis_ev_caller_exit_at_start.
  APPEND ls_event TO lt_event.
* 显示alv列表
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = ls_layo
      it_fieldcat_lvc    = lt_fcat
      i_save             = 'A'
      it_events          = lt_event
    TABLES
      t_outtab           = gt_list
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " FRM_DSP_DATA
*&---------------------------------------------------------------------*
*&      Form  CALLER_EXIT
*&---------------------------------------------------------------------*
FORM caller_exit USING u_exit TYPE slis_data_caller_exit.
  DATA: ls_f4 TYPE lvc_s_f4,
        lt_f4 TYPE lvc_t_f4.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = go_alv_grid.
* 设置回车事件
  CALL METHOD go_alv_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
* 设置光标焦点移开被修改单元格后触发事件
  CALL METHOD go_alv_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  SET HANDLER lcl_event_receiver=>hotspot_click FOR go_alv_grid.
ENDFORM.                    "CALLER_EXIT
*&---------------------------------------------------------------------*
*&      Form  FRM_REF_ALV
*&---------------------------------------------------------------------*
FORM frm_ref_alv .
  DATA ls_stbl TYPE lvc_s_stbl.
  ls_stbl-row = abap_true.
  ls_stbl-col = abap_true.
  CALL METHOD go_alv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stbl.
ENDFORM.                    " FRM_REF_ALV

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值