ALV GRID下拉框设置


前言

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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值