文章目录
前言
ALV的grid下拉框
一、ALV下拉框设置
有时用户要求ALV单元格可以下拉选择
1、ALV需要设置为下拉框的字段
2、定义存储下拉列表结构
3、FIELDCAT字段设置
4、下拉框存放值
5、设置下拉列表,使Grid和内表能链接上
二、使用步骤
1.ALV需要设置为下拉框的字段
TABLES:mara.
TYPES:BEGIN OF ty_data,
sel TYPE char1,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
ccyy TYPE char255, "下拉框
END OF ty_data.
DATA:gt_data TYPE TABLE OF ty_data,
gs_data TYPE ty_data.
2.定义存储下拉列表结构
*定义存储下拉列表的数据
DATA :gt_ddval TYPE lvc_t_drop,
gw_ddval TYPE lvc_s_drop.
DATA: i_fieldcat TYPE lvc_t_fcat, "内表-字段属性
wa_fieldcat TYPE lvc_s_fcat, "工作区-字段属性
wa_layout TYPE lvc_s_layo, "工作区-布局
ls_variant TYPE disvariant.
DATA: o_grid TYPE REF TO cl_gui_alv_grid .
DATA: i_events TYPE slis_t_event,
wa_events TYPE slis_alv_event.
3、FIELDCAT字段设置
这里定义的宏,也可以用其他的方式
DEFINE m_fill.
wa_fieldcat-fieldname = &1.
wa_fieldcat-scrtext_m = &2.
wa_fieldcat-ref_field = &3.
wa_fieldcat-ref_table = &4.
wa_fieldcat-edit = &5.
IF &1 = 'CCYY'. "下拉框
wa_fieldcat-edit = 'X'.
wa_fieldcat-drdn_field = 'DD_HANDLE'.
wa_fieldcat-drdn_hndl = '1'.
ENDIF.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
4、下拉框存放值
FORM creat_dropdown_values .
SELECT zcyyy FROM ztsd_cyyy
INTO TABLE @DATA(lt_thyy).
CLEAR gw_ddval.
gw_ddval-handle = '1'.
gw_ddval-value = ' '.
APPEND gw_ddval TO gt_ddval.
CLEAR gt_ddval[].
LOOP AT lt_thyy INTO DATA(ls_thyy).
CLEAR gw_ddval.
gw_ddval-handle = '1'.
gw_ddval-value = ls_thyy-zcyyy.
APPEND gw_ddval TO gt_ddval.
ENDLOOP.
ENDFORM.
5、设置下拉列表,使Grid和内表能链接上
FORM set_list USING ls_caller_exit TYPE slis_data_caller_exit.
DATA: o_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = o_grid.
CALL METHOD o_grid->set_drop_down_table
EXPORTING
it_drop_down = gt_ddval.
ENDFORM.
6、完整代码
*&---------------------------------------------------------------------*
*& Report ZTEST025
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest025.
TABLES:mara.
TYPES:BEGIN OF ty_data,
sel TYPE char1,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
ccyy TYPE char255, "下拉框
END OF ty_data.
DATA:gt_data TYPE TABLE OF ty_data,
gs_data TYPE ty_data.
*定义存储下拉列表的数据
DATA :gt_ddval TYPE lvc_t_drop,
gw_ddval TYPE lvc_s_drop.
DATA: i_fieldcat TYPE lvc_t_fcat, "内表-字段属性
wa_fieldcat TYPE lvc_s_fcat, "工作区-字段属性
wa_layout TYPE lvc_s_layo, "工作区-布局
ls_variant TYPE disvariant.
DATA: o_grid TYPE REF TO cl_gui_alv_grid .
DATA: i_events TYPE slis_t_event,
wa_events TYPE slis_alv_event.
*宏
DEFINE m_fill.
wa_fieldcat-fieldname = &1.
wa_fieldcat-scrtext_m = &2.
wa_fieldcat-ref_field = &3.
wa_fieldcat-ref_table = &4.
wa_fieldcat-edit = &5.
IF &1 = 'CCYY'. "下拉框
wa_fieldcat-edit = 'X'.
wa_fieldcat-drdn_field = 'DD_HANDLE'.
wa_fieldcat-drdn_hndl = '1'.
ENDIF.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: p_matnr FOR mara-matnr MODIF ID dr.
SELECTION-SCREEN END OF BLOCK bk1.
START-OF-SELECTION.
SELECT a~matnr b~maktx
FROM mara AS a
INNER JOIN makt AS b
ON a~matnr = b~matnr
UP TO 100 ROWS
INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE a~matnr IN p_matnr
.
CLEAR wa_layout.
wa_layout-cwidth_opt = 'X'.
wa_layout-zebra = 'X'.
* wa_layout-sel_mode = 'A'.
wa_layout-box_fname = 'SEL'.
* wa_layout-no_rowmark = 'X'. "禁用行选择
CLEAR ls_variant.
ls_variant-report = sy-repid.
ls_variant-handle = 'H'.
CLEAR i_fieldcat[].
m_fill 'MATNR' '物料号' 'MARA' 'MATNR' ''.
m_fill 'MAKTX' '物料描述' '' '' ''.
m_fill 'CCYY' '下拉框' '' '' 'X'.
wa_events-name = 'CALLER_EXIT'.
wa_events-form = 'SET_LIST'.
APPEND wa_events TO i_events.
PERFORM creat_dropdown_values. "创建下拉框
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
i_callback_user_command = 'FRM_USER_COMMAND '
is_layout_lvc = wa_layout
it_fieldcat_lvc = i_fieldcat
is_variant = ls_variant
i_save = 'A'
it_events = i_events
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
FORM frm_set_pf_status USING l_extab TYPE slis_t_extab.
CLEAR l_extab.
SET PF-STATUS '1000' EXCLUDING l_extab.
ENDFORM.
FORM frm_user_command USING l_ucomm LIKE sy-ucomm
l_selfield TYPE slis_selfield.
DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = o_grid.
CALL METHOD o_grid->check_changed_data.
CASE l_ucomm.
WHEN '&F03' OR '&F15' OR '&F12'.
LEAVE LIST-PROCESSING.
WHEN 'ZXS'.
WHEN 'ZSAVE'.
WHEN 'ZIMPORT'.
WHEN '&IC1'.
ENDCASE.
l_selfield-REFRESH = 'X'.
ENDFORM.
FORM creat_dropdown_values .
SELECT zcyyy FROM ztsd_cyyy
INTO TABLE @DATA(lt_thyy).
CLEAR gw_ddval.
gw_ddval-handle = '1'.
gw_ddval-value = ' '.
APPEND gw_ddval TO gt_ddval.
CLEAR gt_ddval[].
LOOP AT lt_thyy INTO DATA(ls_thyy).
CLEAR gw_ddval.
gw_ddval-handle = '1'.
gw_ddval-value = ls_thyy-zcyyy.
APPEND gw_ddval TO gt_ddval.
ENDLOOP.
ENDFORM.
*---------------------------------------------------------------------*
*设置下拉列表,使Grid和内表能链接上
*---------------------------------------------------------------------*
FORM set_list USING ls_caller_exit TYPE slis_data_caller_exit.
DATA: o_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = o_grid.
CALL METHOD o_grid->set_drop_down_table
EXPORTING
it_drop_down = gt_ddval.
ENDFORM.
7、效果
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。