只有使用REUSE_ALV_GRID_DISPLAY_LVC函数才能设置ALV下拉框
- 定义数据元素
"*定义存储下拉列表的数据
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
- 设置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.
- 数据库中获取下拉框选择项,在调用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.
- 创建事件和事件回调,在调用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.
- 调用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.
运行效果: