ALV颜色设置

单元格颜色

为特定的单元格设置颜色,这需要在 ALV 输出内表中添加一个专门保存颜色的字段,类型为 LVC_T_SCOL。设置完颜色后(包括列名字,行号码),通过调用方法 set_color_column() 将颜色字段传递给 SALV。

行颜色

与单元格颜色设置方法类似,只是不用指定列名字,只要指定行号就可以了。

列颜色

从 COLUMNS 获得对应的列,通过方法 set_color() 设置特定列的颜色。

*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
  PRIVATE SECTION.
    METHODS:set_color
        CHANGING
          co_alv  TYPE REF TO cl_salv_table
          ct_vbak TYPE ty_t_vbak.
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*

*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
    "Set the colors to ALV display"
    CALL METHOD set_color
      CHANGING
        co_alv  = gr_table
        ct_vbak = gt_vbak.
*$*$*.....CODE_ADD_2 - End....................................2..*$*$*

*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
  METHOD set_color.
    "Color for COLUMN"
    DATA: lr_columns TYPE REF TO cl_salv_columns_table,
          lr_column  TYPE REF TO cl_salv_column_table.
    DATA: ls_color TYPE lvc_s_colo. "Colors strucutre"
    INCLUDE <color>. 
    lr_columns = co_alv->get_columns( ).
    "列颜色设置"
    TRY.
        lr_column ?= lr_columns->get_column( 'ERDAT' ).
        ls_color-col = col_total. "color"
        lr_column->set_color( ls_color ).
      CATCH cx_salv_not_found.
    ENDTRY.
    "Color for Specific Cell & Rows"
    DATA: lt_s_color TYPE lvc_t_scol, 
          ls_s_color TYPE lvc_s_scol,
          ls_vbak    LIKE LINE OF ct_vbak,
          l_count    TYPE i.
    LOOP AT ct_vbak INTO ls_vbak.
      l_count = l_count + 1.
      CASE l_count.
        WHEN 3.
          "Apply RED color to the AUART Cell of the 3rd Row"
          ls_s_color-fname     = 'AUART'.
          ls_s_color-color-col = col_negative.
          ls_s_color-color-int = 0.
          ls_s_color-color-inv = 0.
          APPEND ls_s_color TO lt_s_color.
          CLEAR  ls_s_color.
        WHEN 5.
          "Apply GREEN color to the entire row 5 For entire row"
          ls_s_color-color-col = col_positive.
          ls_s_color-color-int = 0.
          ls_s_color-color-inv = 0.
          APPEND ls_s_color TO lt_s_color.
          CLEAR  ls_s_color.
      ENDCASE.
      "Modify that data back to the output table"
      ls_vbak-t_color = lt_s_color.
      MODIFY ct_vbak FROM ls_vbak.
      CLEAR  ls_vbak.
      CLEAR  lt_s_color.
    ENDLOOP.
    "Set this COLOR table field name of the internal table to" 
    "COLUMNS tab reference for the specific colors"
    TRY.
        lr_columns->set_color_column( 'T_COLOR' ).
      CATCH cx_salv_data_error. 
    ENDTRY.
  ENDMETHOD.                    "set_colors"
*$*$*.....CODE_ADD_3 - End....................................3..*$*$*