我想飘啊飘 飘到梦的天堂 那会是什么时候呢

(转)ALV 行列 颜色

转载别人的代码经测试还是一个很不错的代码。

REPORT YLPY_ALV004.

TYPE-POOLS: SLIS.
*一共定义3个内表.
*itab1 :设置列颜色,
*itab2 :设置行颜色.
*itab3 :设置单元格颜色.
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 ITAB_TEST2 OCCURS 0.
        INCLUDE STRUCTURE ITAB_TEST.
DATA: COLOR(4) TYPE C. "定义行颜色字段
DATA: END OF ITAB_TEST2.

* 显示单元格颜色
DATA: BEGIN OF ITAB_TEST3 OCCURS 0.
        INCLUDE STRUCTURE ITAB_TEST.
DATA: COLOR TYPE SLIS_T_SPECIALCOL_ALV.
DATA: END OF ITAB_TEST3.

DATA: FC TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      FC2 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      FC3 TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.

START-OF-SELECTION.
  PERFORM CREATE_DATA. "构建内表数据

END-OF-SELECTION.
  PERFORM FIELDCAT_BUILD. "构建列表头
  PERFORM SHOW_ALV.

*&---------------------------------------------------------------------*
*&      Form create_data
*&---------------------------------------------------------------------*
*      构建内表数据
*----------------------------------------------------------------------*
FORM CREATE_DATA.
  DATA: L_COLOR(4) TYPE C,
          L_CHAR     TYPE C,
          I          TYPE I.
  DATA: COLOR_WA TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE."单元格颜色属性内表
  REFRESH ITAB_TEST.
  REFRESH ITAB_TEST2.
  REFRESH ITAB_TEST3.
  REFRESH FC.
  REFRESH FC2.
  REFRESH FC3.
  WHILE SY-INDEX < 8.
* 内表 1
    ITAB_TEST-COL1 = ( SY-INDEX - 1 ) * 6 + 1.
    ITAB_TEST-COL2 = ( SY-INDEX - 1 ) * 6 + 2.
    ITAB_TEST-COL3 = ( SY-INDEX - 1 ) * 6 + 3.
    ITAB_TEST-COL4 = ( SY-INDEX - 1 ) * 6 + 4.
    ITAB_TEST-COL5 = ( SY-INDEX - 1 ) * 6 + 5.
    ITAB_TEST-COL6 = ( SY-INDEX - 1 ) * 6 + 6.
    APPEND ITAB_TEST.

* 内表 2
    MOVE-CORRESPONDING ITAB_TEST TO ITAB_TEST2.
    L_CHAR = SY-INDEX.
    I = SY-INDEX MOD 2. "根据奇偶数构建行颜色值
    IF I = 0.
      CONCATENATE 'C' L_CHAR '01' INTO L_COLOR.
    ELSE.
      CONCATENATE 'C' L_CHAR '10' INTO L_COLOR.
    ENDIF.
    ITAB_TEST2-COLOR = L_COLOR.
    APPEND ITAB_TEST2.

* 内表 3
    MOVE-CORRESPONDING ITAB_TEST TO ITAB_TEST3. "转移数据到itab_test3内表
    REFRESH COLOR_WA.
    " 第一列颜色
    COLOR_WA-COLOR-COL = L_CHAR.
    COLOR_WA-COLOR-INT = '0'.
    COLOR_WA-COLOR-INV = '0'.
    COLOR_WA-FIELDNAME = 'COL1'.

    APPEND COLOR_WA.
    CONCATENATE L_CHAR '00' INTO ITAB_TEST3-COL1.
    " 第二列颜色
    COLOR_WA-COLOR-INT = '0'.
    COLOR_WA-COLOR-INV = '1'.
    COLOR_WA-FIELDNAME = 'COL2'.
    APPEND COLOR_WA.
    CONCATENATE L_CHAR '01' INTO ITAB_TEST3-COL2.
    " 第三列颜色
    COLOR_WA-COLOR-INT = '1'.
    COLOR_WA-COLOR-INV = '0'.
    COLOR_WA-FIELDNAME = 'COL3'.

    APPEND COLOR_WA.
    CONCATENATE L_CHAR '10' INTO ITAB_TEST3-COL3.

    ITAB_TEST3-COLOR[] = COLOR_WA[].
    APPEND ITAB_TEST3.
  ENDWHILE.
ENDFORM.                    "create_data

************************************************************************
FORM FIELDCAT_BUILD.
  DATA: BEGIN OF FC_STRUCT,
              TABNAME(10),
              FIELDNAME(5),
              SELTEXT_M(5),
              EMPHASIZE(4),
          END OF FC_STRUCT.

  DEFINE AC.
    CLEAR: FC,FC2,FC_STRUCT.
    FC_STRUCT = &1.
    FC-TABNAME   = FC_STRUCT-TABNAME. "内表名
    FC-FIELDNAME = FC_STRUCT-FIELDNAME. "字段名
    FC-SELTEXT_M = FC_STRUCT-SELTEXT_M. "字段描述
    FC-EMPHASIZE = FC_STRUCT-EMPHASIZE. "列颜色
    APPEND FC.
    FC2-TABNAME   = FC_STRUCT-TABNAME. "内表名
    FC2-FIELDNAME = FC_STRUCT-FIELDNAME. "字段名
    FC2-SELTEXT_M = FC_STRUCT-SELTEXT_M. "字段描述
    APPEND FC2.
    IF FC3-FIELDNAME < 'COL4'. "只显示前四列
      FC3-TABNAME   = FC_STRUCT-TABNAME. "内表名
      FC3-FIELDNAME = FC_STRUCT-FIELDNAME. "字段名
      FC3-SELTEXT_M = FC_STRUCT-SELTEXT_M. "字段描述
      APPEND FC3.
    ENDIF.
  END-OF-DEFINITION.
  " 第一个内表显示列颜色效果
  AC 'ITAB_TEST COL1 COL1 C100'.
  AC 'ITAB_TEST COL2 COL2 C200'.
  AC 'ITAB_TEST COL3 COL3 C300'.
  AC 'ITAB_TEST COL4 COL4 C400'.
  AC 'ITAB_TEST COL5 COL5 C500'.
  AC 'ITAB_TEST COL6 COL6 C600'.
ENDFORM.                    "fieldcat_build

*&---------------------------------------------------------------------*
*&      Form show_alv
*&---------------------------------------------------------------------*
*      显示内表 1
*----------------------------------------------------------------------*
FORM SHOW_ALV.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
      IT_FIELDCAT             = FC[]
      I_CALLBACK_USER_COMMAND = 'PROCESS_USER_COMMAND_1' "响应双击事件
      I_SAVE                  = 'A'
    TABLES
      T_OUTTAB                = ITAB_TEST
    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


*&---------------------------------------------------------------------*
*&      Form PROCESS_USER_COMMAND_1
*&---------------------------------------------------------------------*
*       当用户双击时显示下层内容
*----------------------------------------------------------------------*
*      -->UCOMM        text
*      -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM PROCESS_USER_COMMAND_1 USING UCOMM
               RS_SELFIELD TYPE SLIS_SELFIELD.
  IF RS_SELFIELD-FIELDNAME <> SPACE AND RS_SELFIELD-TABINDEX > 0. "这句很有用
    PERFORM SHOW_ALV_2.
  ENDIF.
ENDFORM.                    "PROCESS_USER_COMMAND_1

*&---------------------------------------------------------------------*
*&      Form show_alv_2
*&---------------------------------------------------------------------*
*       显示内表 2   行颜色效果
*----------------------------------------------------------------------*
FORM SHOW_ALV_2.
  DATA: ALV_LAYOUT       TYPE SLIS_LAYOUT_ALV.
  ALV_LAYOUT-INFO_FIELDNAME = 'COLOR'. "显示行颜色
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
      IT_FIELDCAT             = FC2[]
      I_CALLBACK_USER_COMMAND = 'PROCESS_USER_COMMAND_2' "下层双击事件内容
      IS_LAYOUT               = ALV_LAYOUT
      I_SAVE                  = 'U'
    TABLES
      T_OUTTAB                = ITAB_TEST2
    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_2

*&---------------------------------------------------------------------*
*&      Form PROCESS_USER_COMMAND_2
*&---------------------------------------------------------------------*
*      第三层报表内容
*----------------------------------------------------------------------*
*      -->UCOMM        text
*      -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM PROCESS_USER_COMMAND_2 USING UCOMM
               RS_SELFIELD TYPE SLIS_SELFIELD.
  IF RS_SELFIELD-FIELDNAME <> SPACE AND RS_SELFIELD-TABINDEX > 0.
    PERFORM SHOW_ALV_3.
  ENDIF.
ENDFORM.                    "PROCESS_USER_COMMAND_2
*&---------------------------------------------------------------------*
*&      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        = FC3[]
      IS_LAYOUT          = ALV_LAYOUT
      I_SAVE             = 'U'
    TABLES
      T_OUTTAB           = ITAB_TEST3
    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

 

posted @ 2014-12-24 14:04  charles-xiao  阅读(241)  评论(0)    收藏  举报