ABAP ALV报表下拉框设置

只有使用REUSE_ALV_GRID_DISPLAY_LVC函数才能设置ALV下拉框

  1. 定义数据元素
"*定义存储下拉列表的数据
DATA:gt_ddval  TYPE lvc_t_drop,
     gs_ddval  TYPE lvc_s_drop,
     gt_events TYPE slis_t_event,
     gs_events TYPE slis_alv_event.
"ALV参数
DATA: gv_line TYPE c,
      gr_grid     TYPE REF TO cl_gui_alv_grid,    "ALV Grid
      gs_layout   TYPE lvc_s_layo,                "ALV Layout
      gt_fieldcat TYPE lvc_t_fcat.                "ALV Fieldcat
  1. 设置fieldcat
FORM fieldcat_init_all .

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name   = 'ZQMS_QYLIST03'   "自建的ALV输出结构
      i_bypassing_buffer = 'X'
    CHANGING
      ct_fieldcat        = gt_fieldcat.       "Field Catalog

  LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fieldcat>).
    IF <fs_fieldcat>-fieldname = 'QYR'.
      <fs_fieldcat>-edit = 'X'.
      <fs_fieldcat>-drdn_hndl = '1'. "下拉框分组序号
      <fs_fieldcat>-reptext = '请验人'.
    ENDIF.
  ENDLOOP.

ENDFORM.
  1. 数据库中获取下拉框选择项,在调用LVC函数之前调用该frm_drdown_values子例程
*&---------------------------------------------------------------------*
*& Form frm_drdown_values
*&---------------------------------------------------------------------*
FORM frm_drdown_values .
  DATA:lv_count TYPE i.
  SELECT zxm
    FROM zqmt_qy
   INTO TABLE @DATA(lt_zqyr).
  gv_line = lines( lt_zqyr ).
  CLEAR:gs_ddval.
  LOOP AT  lt_zqyr INTO DATA(ls_zqyr).
*    ADD 1 TO lv_count.
    gs_ddval-handle = '1'.
    gs_ddval-value = ls_zqyr-zxm.
    APPEND gs_ddval TO gt_ddval.
  ENDLOOP.

  SORT gt_ddval BY VALUE.
ENDFORM.
  1. 创建事件和事件回调,在调用lvc函数之前调用该frm_creat_event子例程
*&---------------------------------------------------------------------*
*& Form frm_creat_event
*&---------------------------------------------------------------------*
FORM frm_creat_event .
* 固定写法
  gs_events-name = 'CALLER_EXIT'.
  gs_events-form = 'CALLER_EXIT'.
  APPEND gs_events TO gt_events.

ENDFORM.

*---------------------------------------------------------------------*
*      Form  frm_creat_event
*---------------------------------------------------------------------*
*回调函数,不要自己调用,交给lvc
FORM caller_exit USING ls_data TYPE slis_data_caller_exit.
  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  "Get ALV grid
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.

  "设置下拉列表,使Grid和内表能链接上
  CALL METHOD lr_grid->set_drop_down_table
    EXPORTING
      it_drop_down = gt_ddval.

ENDFORM.
  1. 调用LVC函数
  "请验人下拉框
   PERFORM frm_drdown_values .
  "事件
   PERFORM frm_creat_event.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
      i_callback_user_command  = gc_callback_user_command      "F_USER_COMMAND
      i_callback_pf_status_set = gc_callback_satus             "F_SET_STATUS
      i_save                   = 'A'             "A
      it_events                = gt_events
    TABLES
      t_outtab                 = gt_alv				"要输出的ALV内表
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

运行效果:

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值