我们需要控制ALV控件单元格的颜色,满足复杂的需求,这是一个ABAP ALV 控件单元格颜色设置的DEMO。
DEMO运行的效果:
注意数据结构和逻辑:其实在数据表的每一行中,还要加入一张表,用来放这一行,多个列字段的颜色信息。
全部代码如下,以后再来详解:
*&---------------------------------------------------------------------*
*& REPORT ZALV
*&---------------------------------------------------------------------*
*& 刘欣 2020.3.12
*&---------------------------------------------------------------------*
REPORT ZALV.
TYPE-POOLS: SLIS.
DATA GT_FC TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA: BEGIN OF ITAB_TEST OCCURS 0,
COL1(4) TYPE C,
COL2(4) TYPE C,
COL3(4) TYPE C,
COL4(4) TYPE C,
COL5(4) TYPE C,
COL6(4) TYPE C,
END OF ITAB_TEST .
* 显示单元格颜色
DATA: BEGIN OF GT_TABLE OCCURS 0.
INCLUDE STRUCTURE ITAB_TEST.
DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV.
DATA: END OF GT_TABLE.
START-OF-SELECTION.
PERFORM CREATE_DATA. "构建内表数据
END-OF-SELECTION.
PERFORM FIELDCAT_BUILD. "构建列表头
PERFORM SHOW_ALV_3.
*&---------------------------------------------------------------------*
*& FORM CREATE_DATA
*&---------------------------------------------------------------------*
* 构建内表数据
*----------------------------------------------------------------------*
FORM CREATE_DATA.
DATA: GV_INDEX TYPE C.
DATA: GT_COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE."单元格颜色属性内表
REFRESH GT_TABLE.
WHILE SY-INDEX < 8.
GV_INDEX = SY-INDEX.
CONCATENATE GV_INDEX '00' INTO GT_TABLE-COL1.
CONCATENATE GV_INDEX '01' INTO GT_TABLE-COL2.
CONCATENATE GV_INDEX '10' INTO GT_TABLE-COL3.
* 1:海蓝;2:浅清;3:黄色;4:浅蓝;5:青色;6:红色;7:橙色
* (1)颜色
* (2)颜色加强
* (3)末位为0时,表示底色(颜色按首位数字);
* 末位为1时,表示字体颜色(颜色按首位数字);
* 末位为其它颜色时,则表示底色为ALV的默认颜色;
REFRESH GT_COLOR.
" COL1字段
GT_COLOR-FIELDNAME = 'COL1'.
GT_COLOR-COLOR-COL = GV_INDEX.
GT_COLOR-COLOR-INT = '0'.
GT_COLOR-COLOR-INV = '0'.
APPEND GT_COLOR.
" COL2字段
GT_COLOR-FIELDNAME = 'COL2'.
GT_COLOR-COLOR-COL = GV_INDEX.
GT_COLOR-COLOR-INT = '0'.
GT_COLOR-COLOR-INV = '1'.
APPEND GT_COLOR.
" COL3字段
GT_COLOR-FIELDNAME = 'COL3'.
GT_COLOR-COLOR-COL = GV_INDEX.
GT_COLOR-COLOR-INT = '1'.
GT_COLOR-COLOR-INV = '0'.
APPEND GT_COLOR.
" COL4字段
GT_COLOR-FIELDNAME = 'COL4'.
GT_COLOR-COLOR-COL = GV_INDEX.
GT_COLOR-COLOR-INT = '1'.
GT_COLOR-COLOR-INV = '0'.
APPEND GT_COLOR.
" COL5字段
GT_COLOR-FIELDNAME = 'COL15'.
GT_COLOR-COLOR-COL = GV_INDEX.
GT_COLOR-COLOR-INT = '1'.
GT_COLOR-COLOR-INV = '0'.
APPEND GT_COLOR.
" COL6字段
GT_COLOR-FIELDNAME = 'COL6'.
GT_COLOR-COLOR-COL = 6.
GT_COLOR-COLOR-INT = '1'.
GT_COLOR-COLOR-INV = '0'.
APPEND GT_COLOR.
GT_TABLE-COLOR[] = GT_COLOR[].
APPEND GT_TABLE.
ENDWHILE.
ENDFORM. "CREATE_DATA
************************************************************************
FORM FIELDCAT_BUILD.
DEFINE HONG.
GT_FC-FIELDNAME = &1. "字段
GT_FC-SELTEXT_M = &2. "字段描述
APPEND GT_FC.
END-OF-DEFINITION.
HONG 'COL1' 'COL1txt' .
HONG 'COL2' 'COL24234' .
HONG 'COL3' 'COL34324' .
HONG 'COL4' 'COL44234' .
HONG 'COL5' 'COL553454' .
HONG 'COL6' 'COL6dfsf' .
ENDFORM. "FIELDCAT_BUILD
*&---------------------------------------------------------------------*
*& FORM SHOW_ALV_3
*&---------------------------------------------------------------------*
* 显示内表 3 单元格颜色
*----------------------------------------------------------------------*
FORM SHOW_ALV_3.
DATA: ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
ALV_LAYOUT-COLTAB_FIELDNAME = 'COLOR'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IT_FIELDCAT = GT_FC[]
IS_LAYOUT = ALV_LAYOUT
I_SAVE = 'U'
TABLES
T_OUTTAB = GT_TABLE
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. "SHOW_ALV_3 "SHOW_ALV_3