ALV单元格设置下拉列表

        第一次做,将遇到的问题记录一下,希望对你有所帮助,网上资料也很多,但是我自己做的时候依然遇到些问题,所以以下全是自己角度理解的。

1.输出函数要用LVC的,否则fieldcat无法设置句柄和字段名称,会提示参数不存在

DRDN_HNDL 自然数 下拉的句柄

DRDN_FIELD 内部表字段的字段名称 下拉的字段

 2.输出函数中事件的设置

DATA: gt_event TYPE TABLE OF slis_alv_event,
      gs_event TYPE slis_alv_event.

FORM creat_event_exits .
  gs_event-name = 'CALLER_EXIT'. "事件名称
  gs_event-form = 'CALLER_EXIT'. "FORM名称
  APPEND gs_event TO gt_event.
ENDFORM.

既然设置了FORM名称,就不用再写PERFORM,输出函数会自己去调用的

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_dropdown.
ENDFORM.

3. set_drop_down_table 下拉框item数据传入的一个方法

这个要定义一个很重要的类:cl_gui_alv_grid,关于ALV展示的很多方法都包含在这个类里面,之前有用过里面监控ALV更改的一个方法:check_changed_data

 4.展示效果

5.代码展示

REPORT zlm014.

TABLES: sflight.

TYPES: BEGIN OF zty_sflight.
        INCLUDE STRUCTURE sflight.
TYPES: drop_down TYPE int4,   "自己加的字段,用于设置句柄字段名称
       END OF zty_sflight.

DATA:
  gt_sflight2 TYPE TABLE OF zty_sflight,
  gs_sflight2 TYPE  zty_sflight.

DATA: gs_layout   TYPE lvc_s_layo,
      gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat TYPE lvc_s_fcat.


DATA: gt_event TYPE TABLE OF slis_alv_event,
      gs_event TYPE slis_alv_event.

DATA: gs_alv TYPE REF TO cl_gui_alv_grid.
DATA:gt_dropdown TYPE lvc_t_drop,
     gs_dropdown TYPE lvc_s_drop.


SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_sflight2.

gs_layout-zebra = 'X'.
gs_layout-cwidth_opt  = 'X'.


gs_fieldcat-tabname       = 'SFLIGHT'.
gs_fieldcat-fieldname     = 'CARRID'.          " 需要输出的内表的字段名
gs_fieldcat-scrtext_l     = '航线代码'.   " 字段的描述-长字段标签
gs_fieldcat-scrtext_m     = '航线代码'.   " 字段描述-中字段标签
gs_fieldcat-scrtext_s     = '航线代码'.   " 字段描述-短字段标签
gs_fieldcat-edit = 'X'.
gs_fieldcat-drdn_field = 'DROP_DOWN'.
gs_fieldcat-drdn_hndl = '1'.
APPEND gs_fieldcat TO gt_fieldcat .
CLEAR  gs_fieldcat.

gs_fieldcat-tabname       = 'SFLIGHT'.
gs_fieldcat-fieldname     = 'CONNID'.          " 需要输出的内表的字段名
gs_fieldcat-scrtext_l     = '航班连接 Id'.   " 字段的描述-长字段标签
gs_fieldcat-scrtext_m     = '航班连接 Id'.   " 字段描述-中字段标签
gs_fieldcat-scrtext_s     = '航班连接 Id'.   " 字段描述-短字段标签
APPEND gs_fieldcat TO gt_fieldcat .
CLEAR  gs_fieldcat.

gs_fieldcat-tabname       = 'SFLIGHT'.
gs_fieldcat-fieldname     = 'FLDATE'.          " 需要输出的内表的字段名
gs_fieldcat-scrtext_l     = '航班日期'.   " 字段的描述-长字段标签
gs_fieldcat-scrtext_m     = '航班日期'.   " 字段描述-中字段标签
gs_fieldcat-scrtext_s     = '航班日期'.   " 字段描述-短字段标签
APPEND gs_fieldcat TO gt_fieldcat .
CLEAR  gs_fieldcat.

gs_fieldcat-tabname       = 'SFLIGHT'.
gs_fieldcat-fieldname     = 'PRICE'.          " 需要输出的内表的字段名
gs_fieldcat-scrtext_l     = '航空运费'.   " 字段的描述-长字段标签
gs_fieldcat-scrtext_m     = '航空运费'.   " 字段描述-中字段标签
gs_fieldcat-scrtext_s     = '航空运费'.   " 字段描述-短字段标签
APPEND gs_fieldcat TO gt_fieldcat .
CLEAR  gs_fieldcat.




PERFORM set_drdn_table.

PERFORM creat_event_exits.



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    i_callback_program       = sy-repid
    i_callback_pf_status_set = 'FRM_SET_STATUS'
    is_layout_lvc            = gs_layout
    it_fieldcat_lvc          = gt_fieldcat
    it_events                = gt_event
  TABLES
    t_outtab                 = gt_sflight2
  EXCEPTIONS
    program_error            = 1
    OTHERS                   = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.




*激活自定义状态栏
FORM frm_set_status USING rt_extab TYPE slis_t_extab.
  CLEAR: rt_extab.
  REFRESH: rt_extab.
  SET PF-STATUS '9001' EXCLUDING rt_extab.
ENDFORM.                    "FRM_SET_STATUS
*&---------------------------------------------------------------------*
*&      Form  SET_DRDN_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_drdn_table .

  CLEAR gs_dropdown.
  gs_dropdown-handle = '1'.
  gs_dropdown-value  = 'AA'.
  APPEND gs_dropdown TO gt_dropdown.

  CLEAR gs_dropdown.
  gs_dropdown-handle = '1'.
  gs_dropdown-value  = 'BB'.
  APPEND gs_dropdown TO gt_dropdown.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREAT_EVENT_EXITS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM creat_event_exits .
  gs_event-name = 'CALLER_EXIT'. "事件名称
  gs_event-form = 'CALLER_EXIT'. "FORM名称
  APPEND gs_event TO gt_event.
ENDFORM.

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_dropdown.
ENDFORM.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值