ABAP - ALV列表下拉框

相关代码:

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.     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值