先上结果图:
代码:
REPORT ZDCH_09_TEST2.
************************************************************************
* DATEN DEFINITION *
************************************************************************
TYPE-POOLS: SLIS.
TABLES:MAKT.
TYPES:
BEGIN OF T_DATA, "查询出来的数据
MATNR TYPE MAKT-MATNR,
MAKTX TYPE MAKT-MAKTX,
SPRAS TYPE MAKT-SPRAS,
END OF T_DATA,
BEGIN OF T_ALV, "alv显示的数据
MATNR TYPE MAKT-MATNR,
MAKTX TYPE MAKT-MAKTX,
SPRAS TYPE MAKT-SPRAS,
DD_HANDLE TYPE INT4, "绑定下拉框对应的组
END OF T_ALV.
DATA:
"fieldcat
GT_FIELDCATALOG TYPE LVC_T_FCAT,
GW_FIELDCATALOG TYPE LVC_S_FCAT,
*定义存储下拉列表的数据
GT_DDVAL TYPE LVC_T_DROP,
GW_DDVAL TYPE LVC_S_DROP,
"alv事件
GT_EVENTS TYPE SLIS_T_EVENT,
GW_EVENTS TYPE SLIS_ALV_EVENT,
"数据库数据
GT_DATA TYPE TABLE OF T_DATA,
GW_DATA TYPE T_DATA,
"alv数据
GT_ALV TYPE TABLE OF T_ALV,
GW_ALV TYPE T_ALV,
G_REPID TYPE SY-REPID VALUE SY-REPID.
************************************************************************
* SELECTION SCREEN *
************************************************************************
SELECT-OPTIONS: S_MATNR FOR MAKT-MATNR .
************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
"获取数据
SELECT MATNR MAKTX SPRAS
INTO TABLE GT_DATA
UP TO 50 ROWS
FROM MAKT
WHERE MATNR IN S_MATNR
AND SPRAS = '1'.
"alv填充数据
LOOP AT GT_DATA INTO GW_DATA.
MOVE-CORRESPONDING GW_DATA TO GW_ALV.
APPEND GW_ALV TO GT_ALV.
ENDLOOP.
"设置fieldcat
PERFORM CREAT_FIELDCAT.
"设置下拉框值
PERFORM CREAT_DROPDOWN_VALUES.
"设置下拉框事件
PERFORM CREAT_EVENT_EXITS.
"显示alv
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT_LVC = GT_FIELDCATALOG
IT_EVENTS = GT_EVENTS "这一步一定要记得添加上
TABLES
T_OUTTAB = GT_ALV.
*---------------------------------------------------------------------*
* 设置输出字段的格式
*---------------------------------------------------------------------*
FORM CREAT_FIELDCAT.
CLEAR GW_FIELDCATALOG.
GW_FIELDCATALOG-FIELDNAME = 'MATNR'.
GW_FIELDCATALOG-REF_FIELD = 'MATNR'.
GW_FIELDCATALOG-REF_TABLE = 'MAKT'.
APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.
CLEAR GW_FIELDCATALOG.
GW_FIELDCATALOG-FIELDNAME = 'MAKTX'.
GW_FIELDCATALOG-REF_FIELD = 'MAKTX'.
GW_FIELDCATALOG-REF_TABLE = 'MAKT'.
APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.
CLEAR GW_FIELDCATALOG.
GW_FIELDCATALOG-FIELDNAME = 'SPRAS'.
GW_FIELDCATALOG-DRDN_FIELD = 'DD_HANDLE'. "设置下拉框
* GW_FIELDCATALOG-DRDN_HNDL = '1'. "分组标识
GW_FIELDCATALOG-EDIT = 'X'. "可编辑
APPEND GW_FIELDCATALOG TO GT_FIELDCATALOG.
ENDFORM. " creat_fieldcat
*---------------------------------------------------------------------*
*根据物料的所有的语言生成不同的生成下拉列表
*---------------------------------------------------------------------*
FORM CREAT_DROPDOWN_VALUES.
DATA: L_SPRAS TYPE MAKT-SPRAS,
L_COUNT TYPE I.
"为了演示简单,这里只设置了一组
"句柄HANDLE 为I类型,相同数字为同一组下拉框"
GW_DDVAL-HANDLE = 1. "对应分组标识第一组
GW_DDVAL-VALUE = 1. "组值
APPEND GW_DDVAL TO GT_DDVAL.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = 1. "第一组
GW_DDVAL-VALUE = 2.
APPEND GW_DDVAL TO GT_DDVAL.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = 1. "第一组
GW_DDVAL-VALUE = 3.
APPEND GW_DDVAL TO GT_DDVAL.
CLEAR GW_DDVAL.
LOOP AT GT_ALV INTO GW_ALV.
GW_ALV-DD_HANDLE = 1. "ALV绑定组
MODIFY GT_ALV FROM GW_ALV.
ENDLOOP.
ENDFORM. " creat_dropdown_values
*---------------------------------------------------------------------*
* Form creat_event_exits
*---------------------------------------------------------------------*
FORM CREAT_EVENT_EXITS .
GW_EVENTS-NAME = 'CALLER_EXIT'.
GW_EVENTS-FORM = 'CALLER_EXIT'.
APPEND GW_EVENTS TO GT_EVENTS.
ENDFORM. " creat_event_exits
*---------------------------------------------------------------------*
*设置下拉列表,使Grid和内表能链接上
*---------------------------------------------------------------------*
FORM CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.
DATA: L_REF_ALV TYPE REF TO CL_GUI_ALV_GRID.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = L_REF_ALV.
CALL METHOD L_REF_ALV->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN = GT_DDVAL.
ENDFORM. "CALLER_EXIT
需要注意的是:如果下拉框设置的值是中文汉字,那么就不能输入了。
还有:下拉框设置了值,并且设置了可编辑,此时编辑的时候只能输入下拉框中有的值,其他的值输入不进去。
设置F4搜索帮助
只需要把之前设置的DRDN_FIELD修改成F4AVAILABL,然后设置上参考表和参考字段,去表里给这个字段设置上它的搜索帮助,那么ALV也就可以用了!