(转)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
最爱江南烟雨如画:浩浩宇宙,朗朗乾坤,花花世界,滚滚红尘

浙公网安备 33010602011771号