ALV显示红绿灯(FM ALV 和 OO ALV两…

FM 方式ALV 红绿灯

*&---------------------------------------------------------------------*
*& Report  ZLM_ALV_07
*&
*&---------------------------------------------------------------------*
*1)在alv引用类型池定义时加入icon,如type-pools: slis, icon.
*
*2)给显示内表itab定义一字段statu存储状态灯;
*
*3)循环内表itab给字段statu值赋:
*绿灯:itab-statu icon_led_green.
*红灯:itab-statu icon_led_red.
*4)alv的fieldcat属性i_fieldcat-icon 'X'.
*&---------------------------------------------------------------------*

REPORT  zlm_alv_07 .

*&---------------------------------------------------------------------*
*& 声明
*&---------------------------------------------------------------------*
TYPE-POOLS : slis ,  icon .

*&---------------------------------------------------------------------*
*&基本数据定义
*&---------------------------------------------------------------------*
DATA :
            BEGIN  OF str_data ,
                id      TYPE int4 ,
                age        TYPE int4 ,
                statu    TYPE char10 ,
            END  OF str_data .

DATA :
            g_it_data  LIKE  TABLE  OF str_data ,
            g_wa_data  LIKE str_data .

*&---------------------------------------------------------------------*
*& ALV相关定义
*&---------------------------------------------------------------------*
DATA : fieldcat  TYPE slis_t_fieldcat_alv  WITH  HEADER  LINE .

*&---------------------------------------------------------------------*
*& 宏定义
*&---------------------------------------------------------------------*
DEFINE fill_fieldcat .
    fieldcat -fieldname  &1 .
    fieldcat -seltext_l  &2 .
    fieldcat - icon     'X' .       "图标功能
    append fieldcat .
END-OF-DEFINITION .

*&---------------------------------------------------------------------*
*& 主逻辑
*&---------------------------------------------------------------------*

START-OF-SELECTION .
    PERFORM zform_fill_data .
    PERFORM zform_show .

*&---------------------------------------------------------------------*
*& form区
*&---------------------------------------------------------------------*

FORM zform_fill_data .
    fill_fieldcat    'ID'    '编号' .
    fill_fieldcat    'AGE'   '年龄' .
    fill_fieldcat    'STATU'  '灯饰' .

    g_wa_data - id     1 .
    g_wa_data -age      12 .
    g_wa_data -statu  icon_led_red .

    APPEND g_wa_data  TO g_it_data .

    g_wa_data - id     2 .
    g_wa_data -age      13 .
    g_wa_data -statu  icon_led_green .

    APPEND g_wa_data  TO g_it_data .
ENDFORM .                     "zform_fill_data

*&---------------------------------------------------------------------*
*&      Form  zform_show
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
FORM zform_show .
    CALL  FUNCTION  'REUSE_ALV_LIST_DISPLAY'
        EXPORTING
            it_fieldcat  fieldcat[]
        TABLES
            t_outtab        g_it_data[] .
ENDFORM .                     "zform_show


OO 方式ALV 红绿灯
效果:
ALV显示红绿灯(FM <wbr>ALV <wbr>和 <wbr>OO <wbr>ALV两种实现方式)

主要代码:
*&---------------------------------------------------------------------*
*&   全局变量
*&---------------------------------------------------------------------*
DATA:
      BEGIN OF str_spfli,
        checkbox TYPE char1,
        status   TYPE icon_d,                 "检查状态图标
        carrid   TYPE   sflight-carrid       , "航线承运人ID
        connid   TYPE   sflight-connid       , "航班连接 Id
        fldate   TYPE   sflight-fldate       , "航班日期
        price     TYPE   sflight-price         , "航空运费
        cellstyle TYPE lvc_t_styl,           "可编辑字段SORT表
      END OF   str_spfli.

DATA:
      g_it_show LIKE TABLE OF str_spfli WITH KEY checkbox carrid connid,
      g_wa_show LIKE str_spfli.


START-OF-SELECTION.

  "获取数据
  SELECT carrid
          connid
          fldate
          price
    FROM sflight INTO CORRESPONDING FIELDS OF   TABLE g_it_show.

  FIELD-SYMBOLS   LIKE LINE OF   g_it_show.
  DATA:l_dex TYPE int4.

  LOOP AT g_it_show ASSIGNING .
    l_dex = sy-tabix MOD 3.

    CASE l_dex.
      WHEN 1 .
        -status = icon_led_green.
      WHEN 2.
        -status = icon_led_red.
      WHEN OTHERS.
        -status = icon_led_yellow.
    ENDCASE.
  ENDLOOP.
  "调用屏幕
  CALL SCREEN 9001.



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.
*     SET HANDLER g_event->handle_f4           FOR g_alv_grid.
    SET HANDLER g_event->handle_cell_click   FOR g_alv_grid.
    SET HANDLER g_event->handle_user_command FOR g_alv_grid.
    SET HANDLER g_event->handle_double_click FOR g_alv_grid.
    SET HANDLER g_event->handle_onf1         FOR g_alv_grid.

    "以下两个方法达到的效果是:光标离开正在编辑的单元格时,就触发了handle_data_changed
    "如果不注释掉以下两个方法,则只有执行下一操作时才会触发handle_data_changed,比如点保存点删除
    CALL METHOD g_alv_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD g_alv_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.

*   "显示内表数据
    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[].

  ELSE.

    "冲销设置tcode 为 RELOAD,防止因为原来的tcode影响程序执行
    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = 'RELOAD'.

    "ALV 控制:刷新稳定性 按行刷新,可选参数
    CLEAR is_stable.
    is_stable-col = 'X'.

    "刷新
    CALL METHOD g_alv_grid->refresh_table_display
      EXPORTING
        is_stable       = is_stable
        i_soft_refresh = 'X'.

    "提交
    CALL METHOD cl_gui_cfw=>flush.

  ENDIF.
ENDFORM.                     " ZFORM_ALV_SHOW



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值