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().
    IF -fieldname = 'QYR'.
      -edit = 'X'.
      -drdn_hndl = '1'. "下拉框分组序号
      -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.

运行效果:
ABAP ALV报表下拉框设置_第1张图片

你可能感兴趣的:(abap基础,ALV报表,abap,sap)