ABAP ALV控件設置單元格顏色DEMO

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章