我們需要控制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