zoukankan      html  css  js  c++  java
  • OO ALV 实现下拉框

    ooALV相关的:

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

    *…………………………………………………………………………………………
    * 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

    就可以了
    http://blog.sina.com.cn/sapliumeng
  • 相关阅读:
    xgzc— math 专题训练(一)
    floyd判圈算法
    CF961G Partitions
    luoguP4778 Counting swaps
    AT3913 XOR Tree(巧妙转换+状压dp)
    手动实现aop编程
    代理模式
    spring重点一:处理对象创建时间 个数以及方式
    spring helloword
    spring用来干什么,解决的问题
  • 原文地址:https://www.cnblogs.com/senlinmu110/p/3802112.html
Copyright © 2011-2022 走看看