相关代码:
1、内表增加字段定义
HANDLE1 TYPE INT4
2、下拉框内表定义
DATA:GT_DDVAL TYPE LVC_T_DROP,
GW_DDVAL TYPE LVC_S_DROP,
GT_EVENTS TYPE SLIS_T_EVENT,
GW_EVENTS TYPE SLIS_ALV_EVENT.
3、FIELDCAT组件定义
FIELDCAT-EDIT
FIELDCAT-DRDN_FIELD
4、ALV显示FIELDCAT设置
FILL_FIELD:'BS' '合格标识' '' '' 'X' '' '' '' 'HANDLE1'.
5、下拉框内表赋值等相关(在ALV函数之前执行)
①、
FORM CREAT_DROPDOWN_VALUES.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = '1'.
GW_DDVAL-VALUE = '合格'.
APPEND GW_DDVAL TO GT_DDVAL.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = '1'.
GW_DDVAL-VALUE = '不合格'.
APPEND GW_DDVAL TO GT_DDVAL.
GT_TAB-HANDLE1 = 1.
MODIFY GT_TAB TRANSPORTING HANDLE1 WHERE HANDLE1 IS INITIAL.
ENDFORM.
②、
FORM CREAT_EVENT_EXITS .
GW_EVENTS-NAME = 'CALLER_EXIT'.
GW_EVENTS-FORM = 'CALLER_EXIT'.
APPEND GW_EVENTS TO GT_EVENTS.
ENDFORM.
③、设置下拉列表,使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.
* CALL METHOD L_REF_ALV->CHECK_CHANGED_DATA.
* CALL METHOD L_REF_ALV->REFRESH_TABLE_DISPLAY.
ENDFORM.
至此,关于实现下拉框的所有步骤都已完成,下面贴出完整demo代码:
REPORT ZMYDEMO013.
TYPE-POOLS: SLIS.
TABLES:AFPO.
TYPES:BEGIN OF TY_TAB,
AUFNR TYPE AFPO-AUFNR, "生产订单号
WERKS TYPE MARC-WERKS, "工厂
MATNR TYPE AFPO-MATNR, "物料号
MAKTX TYPE MAKT-MAKTX, "物料描述
SEL TYPE C, "选择
STATU TYPE CHAR10, "红绿灯
HANDLE1 TYPE INT4,
BS TYPE CHAR10,
END OF TY_TAB.
DATA:GT_TAB TYPE TABLE OF TY_TAB WITH HEADER LINE.
DATA:
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FIELDCAT TYPE TABLE OF LVC_S_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
*定义存储下拉列表的数据
GT_DDVAL TYPE LVC_T_DROP,
GW_DDVAL TYPE LVC_S_DROP,
GT_EVENTS TYPE SLIS_T_EVENT,
GW_EVENTS TYPE SLIS_ALV_EVENT.
DEFINE FILL_FIELD.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = &1. "字段的名字(内表中定义的字段名)
GS_FIELDCAT-SCRTEXT_L = &2. "字段的文本描述,输出时候显示。长描述
GS_FIELDCAT-QFIELDNAME = &3. "计量单位字段名,例如如值EA对应的字段名
GS_FIELDCAT-NO_ZERO = &4. "如果取值为零,则为空,既不输出零。
GS_FIELDCAT-EDIT = &5. "当前列可编辑
GS_FIELDCAT-REF_TABLE = &6. "该字段的参考表
GS_FIELDCAT-REF_FIELD = &7. "该字段的参考字段
GS_FIELDCAT-CHECKBOX = &8. "选择框
GS_FIELDCAT-DRDN_FIELD = &9.
* GS_FIELDCAT-ICON = 'X'. "图标功能
APPEND GS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.
SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_WERKS TYPE MARC-WERKS OBLIGATORY DEFAULT '1101'. "工厂
SELECT-OPTIONS:
S_ERDAT FOR SY-DATUM DEFAULT SY-DATUM,
S_MATNR FOR AFPO-MATNR. "物料号
SELECTION-SCREEN:END OF BLOCK B1.
INITIALIZATION.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
PERFORM FRM_DIS_DATA.
END-OF-SELECTION.
FORM FRM_GET_DATA.
SELECT AFPO~AUFNR AFPO~MATNR MARC~WERKS MAKT~MAKTX
INTO CORRESPONDING FIELDS OF TABLE GT_TAB
FROM AFPO INNER JOIN MAKT ON AFPO~MATNR = MAKT~MATNR
INNER JOIN MARC ON AFPO~MATNR = MARC~MATNR UP TO 10 ROWS
WHERE MARC~WERKS = P_WERKS
AND AFPO~MATNR IN S_MATNR.
LOOP AT GT_TAB.
"红绿灯判断赋值
IF SY-SUBRC = 0.
GT_TAB-STATU = ICON_LED_GREEN.
ELSE.
GT_TAB-STATU = ICON_LED_RED.
ENDIF.
MODIFY GT_TAB.
ENDLOOP.
ENDFORM.
FORM FRM_DIS_DATA.
CLEAR:GS_LAYOUT.
GS_LAYOUT-CWIDTH_OPT = 'X'. "自动优化列宽
GS_FIELDCAT-EDIT = 'X'.
*默认选择框 不需要在FILL_FIELD中添加SEL
* GS_LAYOUT-BOX_FNAME = 'SEL'.
*勾选型选择框
GS_FIELDCAT-FIELDNAME = 'SEL'.
GS_FIELDCAT-CHECKBOX = 'X'.
REFRESH GT_FIELDCAT.
FILL_FIELD:'SEL' '选择' '' '' 'X' '' '' 'X' ''.
FILL_FIELD:'AUFNR' '生产订单' '' '' '' '' '' '' ''.
FILL_FIELD:'MATNR' '物料号' '' '' '' 'AFPO' 'MATNR' '' ''.
FILL_FIELD:'MAKTX' '物料描述' '' '' 'X' '' '' '' ''.
FILL_FIELD:'STATU' '红绿灯' '' '' '' '' '' '' ''.
FILL_FIELD:'BS' '合格标识' '' '' 'X' '' '' '' 'HANDLE1'.
PERFORM CREAT_DROPDOWN_VALUES.
PERFORM CREAT_EVENT_EXITS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT_LVC = GT_FIELDCAT[]
IT_EVENTS = GT_EVENTS
TABLES
T_OUTTAB = GT_TAB.
ENDFORM.
*---------------------------------------------------------------------*
*根据物料的所有的语言生成不同的生成下拉列表
*---------------------------------------------------------------------*
FORM CREAT_DROPDOWN_VALUES.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = '1'.
GW_DDVAL-VALUE = '合格'.
APPEND GW_DDVAL TO GT_DDVAL.
CLEAR GW_DDVAL.
GW_DDVAL-HANDLE = '1'.
GW_DDVAL-VALUE = '不合格'.
APPEND GW_DDVAL TO GT_DDVAL.
GT_TAB-HANDLE1 = 1.
MODIFY GT_TAB TRANSPORTING HANDLE1 WHERE HANDLE1 IS INITIAL.
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.
* CALL METHOD L_REF_ALV->CHECK_CHANGED_DATA.
* CALL METHOD L_REF_ALV->REFRESH_TABLE_DISPLAY.
ENDFORM.