0
点赞
收藏
分享

微信扫一扫

OO ALV 实现下拉框_SAP刘梦


至于下拉框,主要的地方如下:

*………………………………………………………………………………………… * lvc_s_fcat 指定某字段为下拉框 *…………………………………………………………………………………………

DATA: wa_fieldcatalog    TYPE lvc_s_fcat,    "显示数据列内表工作区域       it_fieldcatalog    TYPE lvc_t_fcat.    "显示数据列内表

DEFINE mac_fieldlog. * g_pos = g_pos + 1.                               "第几列 * wa_fieldcatalog-col_pos         = g_pos.         "列   wa_fieldcatalog-fieldname       = &1.            "字段名称 * wa_fieldcatalog-coltext         = &2.            "显示名称,跟reptext效果基本相同   wa_fieldcatalog-reptext         = &2.   wa_fieldcatalog-outputlen       = &3.            "显示长度

……  其他相关逻辑 …… "对AAA字段实现下拉框显示   if &1 eq 'AAA'.      wa_fieldcatalog-edit     = 'X'.               "可编辑     wa_fieldcatalog-drdn_hndl = '1'.               "下拉框句柄1     wa_fieldcatalog-outputlen = 7.   endif.

"对BBB字段实现下拉框显示   if &1 eq 'BBBB'.     wa_fieldcatalog-drdn_hndl = '2'.              "下拉框句柄2   endif.

  append wa_fieldcatalog to it_fieldcatalog.   clear wa_fieldcatalog. END-OF-DEFINITION.


*………………………………………………………………………………………… *  调用类,实现下拉框功能 *………………………………………………………………………………………… DATA: g_alv_grid    TYPE REF TO cl_gui_alv_grid,                     "ALV类       alv_ctner     TYPE REF TO cl_gui_docking_container.

FORM zform_alv_show .   DATA:   l_style      TYPE i,           ls_layout    TYPE lvc_s_layo,           is_stable    TYPE lvc_s_stbl,           l_disvariant TYPE disvariant.

* 屏幕初始化   IF alv_ctner IS INITIAL.

    CREATE OBJECT alv_ctner       EXPORTING         repid                       = sy-repid         dynnr                       = '9001' *       side                        = cl_gui_docking_container=>dock_at_right      ”ALV贴屏幕右边,从屏幕右边开始算宽度         side                        = cl_gui_docking_container=>dock_at_left       "ALV贴屏幕左边,从左边算屏幕宽度,         extension                   = 900                                          "屏幕宽度 *        style                       = cl_gui_control=>ws_child                     "可选参数,设置ALV是否可用手动拖动大小       EXCEPTIONS         cntl_error                  = 1         cntl_system_error           = 2         create_error                = 3         lifetime_error              = 4         lifetime_dynpro_dynpro_link = 5         OTHERS                      = 6.

    IF sy-subrc <> 0.       MESSAGE s001(00) WITH '屏幕初始化失败'.       LEAVE LIST-PROCESSING.     ENDIF.




*添加自定义工具条     PERFORM frm_set_alv_toolbar. *     CREATE OBJECT g_alv_grid       EXPORTING         i_parent = alv_ctner.

*构建显示字段样式     PERFORM frm_build_fieldcat.

    "Set/Reset Ready for Input Status     CALL METHOD g_alv_grid->set_ready_for_input       EXPORTING         i_ready_for_input = 1.

* layout 设定样式     CLEAR ls_layout.     ls_layout-cwidth_opt = 'X'.     "优化列宽

    CLEAR l_disvariant.     l_disvariant-report = sy-repid. "当前程序

* event  绑定事件     CREATE OBJECT g_event.

    SET HANDLER g_event->toolbar             FOR g_alv_grid.     SET HANDLER g_event->handle_data_changed FOR g_alv_grid.


*这里是下拉框相关逻辑…………………………………………   DATA: lt_dropdown TYPE lvc_t_drop,       ls_dropdown TYPE lvc_s_drop.

  "第一个下拉框:AAA字段   ls_dropdown-handle = '1'.                          "指定下拉框句柄   ls_dropdown-value = '1 春天'.   APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '1'.   ls_dropdown-value = '2 夏天'.   APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '1'.   ls_dropdown-value = '3 冬天'.   APPEND ls_dropdown TO lt_dropdown.

  "第二个下拉框:BBB字段   ls_dropdown-handle = '2'.                            "指定下拉框句柄   ls_dropdown-value = '0 启用'.   APPEND ls_dropdown TO lt_dropdown.

  ls_dropdown-handle = '2'.   ls_dropdown-value = '1 禁止'.   APPEND ls_dropdown TO lt_dropdown.

  CALL METHOD g_alv_grid->set_drop_down_table        "调用alv类的下拉框方法     EXPORTING       it_drop_down = lt_dropdown.

*end………………………………………………………………


*   "显示内表数据     CALL METHOD g_alv_grid->set_table_for_first_display       EXPORTING         is_layout            = ls_layout         is_variant           = l_disvariant         it_toolbar_excluding = gt_tools       CHANGING         it_fieldcatalog      = it_fieldcatalog[]         it_outtab            = g_it_show[].



如上即可


有时候有你会发现点保存的时候报错: 比如你有个状态字段,在库表里是char1类型的, 你下拉框里显示:0:启用  1:禁用

当你定义alv字段的时候,直接参考库表的char1类型 点保存的时候会提示: “条目0 启用 过长  大于1”

这个时候,在定义alv子段的时候,不参考char1类型 而是定义成string

就可以了

举报

相关推荐

0 条评论