ALV OO:颜色控制

1.信号灯

绿灯:3
黄灯:2
红灯:1
关键代码如下:
DATA: BEGIN OF gt_data OCCURS 0.
        INCLUDE STRUCTURE spfli.
DATA:   light TYPE c. " 显示信号灯的字段
DATA: END OF gt_data.

LOOP AT gt_data.
  " 为內表的信号灯字段赋值
  IF gt_data-carrid = 'AA'.
    gt_data-light = '1'.
  ELSEIF gt_data-carrid = 'AB'.
    gt_data-light = '2'.
  ELSE.
    gt_data-light = '3'.
  ENDIF.
  MODIFY gt_data TRANSPORTING light.
ENDLOOP.

FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  " 设置ALV布局
  p_layout-excp_fname = 'LIGHT'.
ENDFORM.
2.行颜色

关键代码如下:

DATA: BEGIN OF gt_data OCCURS 0.
        INCLUDE STRUCTURE spfli.
DATA:   linecolor(4) TYPE c. " 指定行颜色的字段
DATA: END OF gt_data.

LOOP AT gt_data.
  " 为行颜色字段赋值
  CASE gt_data-carrid.
    WHEN 'AA'.
      gt_data-linecolor = 'C400'.
    WHEN 'AB'.
      gt_data-linecolor = 'C500'.
    WHEN OTHERS.
      gt_data-linecolor = 'C600'.
  ENDCASE.
  MODIFY gt_data TRANSPORTING linecolor.
ENDLOOP.

FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  " 设置布局
  p_layout-info_fname = 'LINECOLOR'.
ENDFORM.

3.单元格颜色

关键代码如下:

DATA: BEGIN OF gt_data OCCURS 0.
        INCLUDE STRUCTURE spfli.
DATA:   cellcolor TYPE lvc_t_scol.
DATA: END OF gt_data.

FORM set_cellcolor.
  DATA: lt_color    TYPE lvc_t_scol,
        ls_color    TYPE lvc_s_scol,
        ls_fieldcat TYPE lvc_s_fcat,
        l_index     TYPE i.
  LOOP AT gt_data.
    l_index = l_index + 1.
    CLEAR: lt_color[].
    LOOP AT gt_fieldcat INTO ls_fieldcat.
      CLEAR: ls_color.
      ls_color-fname = ls_fieldcat-fieldname.
      IF ls_color-fname EQ 'AIRPFROM'.
        CASE gt_data-airpfrom.
          WHEN 'ASP'.
            ls_color-color-col = 3. " ls_color-color是一结构,仍包含三个字段
            ls_color-color-int = 0.
            ls_color-color-inv = 0.
          WHEN 'GIG'.
            ls_color-color-col = 6.
            ls_color-color-int = 0.
            ls_color-color-inv = 0.
          WHEN OTHERS.
            ls_color-color-col = 5.
            ls_color-color-int = 0.
            ls_color-color-inv = 0.

        ENDCASE.
        INSERT ls_color INTO TABLE lt_color.
      ENDIF.
    ENDLOOP.
    CLEAR: gt_data-cellcolor[].
    INSERT LINES OF lt_color INTO TABLE gt_data-cellcolor.
    MODIFY gt_data INDEX l_index TRANSPORTING cellcolor.
  ENDLOOP.
ENDFORM.

FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  p_layout-ctab_fname = 'CELLCOLOR'.
ENDFORM.
4.完整示例

c

(1). 创建100屏幕



PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  MODULE INIT_CON.
 
PROCESS AFTER INPUT.
  MODULE USER_EXIT_0100 AT EXIT-COMMAND.

(2). 在100屏幕上面画自定义控件,命名为CUS01

(3). 程序代码

REPORT ztest_sy09.

DATA: BEGIN OF gt_data OCCURS 0.
        INCLUDE STRUCTURE spfli.
DATA:   light        TYPE c,
        linecolor(4) TYPE c,
        cellcolor    TYPE lvc_t_scol.
DATA: END OF gt_data.


DATA: g_con01 TYPE REF TO cl_gui_custom_container.

DATA: g_grid01 TYPE REF TO cl_gui_alv_grid.

DATA: gs_fieldcat TYPE lvc_s_fcat.
DATA: gt_fieldcat TYPE lvc_t_fcat.

CONSTANTS: g_cus01 TYPE scrfname VALUE 'CUS01'.

START-OF-SELECTION.
  PERFORM get_data.

  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text 获取数据
*----------------------------------------------------------------------*
FORM get_data.
  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE gt_data
  UP TO 30 ROWS
  FROM spfli.

ENDFORM. "GET_DATA

*&---------------------------------------------------------------------*
*& Form set_light
*&---------------------------------------------------------------------*
* text 信号灯字段赋值
*----------------------------------------------------------------------*
FORM set_light.
  LOOP AT gt_data.
    CASE gt_data-carrid.
      WHEN 'AA'.
        gt_data-light = '1'. " 红灯
      WHEN 'AB'.
        gt_data-light = '2'. " 黄灯
      WHEN OTHERS.
        gt_data-light = '3'. " 绿灯
    ENDCASE.
    MODIFY gt_data TRANSPORTING light linecolor.
  ENDLOOP.

ENDFORM. "set_light

*&---------------------------------------------------------------------*
*& Form set_linecolor
*&---------------------------------------------------------------------*
* text 行颜色字段赋值
*----------------------------------------------------------------------*
FORM set_linecolor.
  LOOP AT gt_data.
    CASE gt_data-carrid.
      WHEN 'AA'.
        gt_data-linecolor = 'C400'.
      WHEN 'AB'.
        gt_data-linecolor = 'C500'.
    ENDCASE.
    MODIFY gt_data TRANSPORTING linecolor.
  ENDLOOP.
ENDFORM. "set_linecolor

*&---------------------------------------------------------------------*
*& Form set_cellcolor
*&---------------------------------------------------------------------*
* text 单元格颜色字段赋值
*----------------------------------------------------------------------*
FORM set_cellcolor.
  DATA: lt_color    TYPE lvc_t_scol,
        ls_color    TYPE lvc_s_scol,
        ls_fieldcat TYPE lvc_s_fcat,
        l_index     TYPE i.
  LOOP AT gt_data.
    l_index = l_index + 1.
    CHECK gt_data-carrid = 'AC'." 只处理AC行的单元格
    CLEAR: lt_color[].
    LOOP AT gt_fieldcat INTO ls_fieldcat.
      CLEAR: ls_color.
      ls_color-fname = ls_fieldcat-fieldname.
      IF ls_color-fname EQ 'AIRPFROM'.
        CASE gt_data-airpfrom.
          WHEN 'ASP'.
            ls_color-color-col = 3.
            ls_color-color-int = 0.
            ls_color-color-inv = 0.
          WHEN 'GIG'.
            ls_color-color-col = 6.
            ls_color-color-int = 0.
            ls_color-color-inv = 0.
        ENDCASE.
        INSERT ls_color INTO TABLE lt_color.
      ENDIF.
    ENDLOOP.
    CLEAR: gt_data-cellcolor[].
    INSERT LINES OF lt_color INTO TABLE gt_data-cellcolor.
    MODIFY gt_data INDEX l_index TRANSPORTING cellcolor.
  ENDLOOP.
ENDFORM. "SET_cellcolor

*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text ALV显示字段文本
*----------------------------------------------------------------------*
FORM set_fieldcat.
  CLEAR: gt_fieldcat[],gs_fieldcat.
  DEFINE macro_fieldcat.
    CLEAR gs_fieldcat.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-coltext = &2.
    APPEND gs_fieldcat TO gt_fieldcat.
  END-OF-DEFINITION.

  macro_fieldcat 'CARRID' '航线代码'.
  macro_fieldcat 'CONNID' '航班连接Id'.
  macro_fieldcat 'COUNTRYFR' '起飞国家'.
  macro_fieldcat 'CITYFROM' '起飞城市'.
  macro_fieldcat 'AIRPFROM' '起飞机场'.
  macro_fieldcat 'COUNTRYTO' '目标国家'.
  macro_fieldcat 'CITYTO' '目标城市'.
  macro_fieldcat 'AIRPTO' '目标机场'.
  macro_fieldcat 'FLTIME' '航班时间'.
  macro_fieldcat 'DEPTIME' '启程时间'.
  macro_fieldcat 'ARRTIME' '到达时间'.
  macro_fieldcat 'DISTANCE' '距离'.

ENDFORM. "SET_FIELDCAT

*&---------------------------------------------------------------------*
*& Form SET_LAYOUT
*&---------------------------------------------------------------------*
* text 布局
*----------------------------------------------------------------------*
* -->P_LAYOUT text
*----------------------------------------------------------------------*
FORM set_layout CHANGING p_layout TYPE lvc_s_layo.
  p_layout-excp_fname = 'LIGHT'.
  p_layout-info_fname = 'LINECOLOR'.
  p_layout-ctab_fname = 'CELLCOLOR'.
ENDFORM. "SET_LAYOUT

*&---------------------------------------------------------------------*
*& Module INIT_CON OUTPUT
*&---------------------------------------------------------------------*
* text 创建ALV
*----------------------------------------------------------------------*
MODULE init_con OUTPUT.

  DATA: ls_layout TYPE lvc_s_layo.

  IF g_con01 IS INITIAL.
    PERFORM set_fieldcat.
    PERFORM set_light.
    PERFORM set_linecolor.
    PERFORM set_cellcolor.
    PERFORM set_layout CHANGING ls_layout.

    " 创建SAP容器实例
    CREATE OBJECT g_con01
      EXPORTING
        container_name              = g_cus01 " 自定义控件名称
      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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    " 创建GRID实例
    CREATE OBJECT g_grid01
      EXPORTING
        i_parent          = g_con01
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    " 调用ALV 显示方法
    CALL METHOD g_grid01->set_table_for_first_display
      EXPORTING
*       i_structure_name              = 'SPFLI' " 参照表结构字段显示
        is_layout                     = ls_layout " 布局
      CHANGING
        it_fieldcatalog               = gt_fieldcat " 显示字段
        it_outtab                     = gt_data[]
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.

  ENDIF.

ENDMODULE. " INIT_CON OUTPUT

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text 工具条
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_BAR'.

ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_EXIT_0100 INPUT
*&---------------------------------------------------------------------*
* text 取消事件
*----------------------------------------------------------------------*
MODULE user_exit_0100 INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE. " USER_EXIT_0100 INPUT

注:  (1). 参考资料:《SAP ABAP开发从入门到精通》 作者:金圣俊; 译者:张钟淑; 机械工业出版社;

          (2). 如有疏漏之处,还请不吝赐教!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值