关于ALV表格颜色,这种需求在项目中会经常用到。
- 列颜色
列的颜色很简单,在构成ALV字段的FIELDCAT内表中有一个字段是EMPHASIZE,将一个char型4位的颜色代码分配到FIELDCAT内表这个字段即可。
1 LW_FCAT-EMPHASIZE = 'C710'. "设置字段的颜色
2
3 MODIFY IT_FIELDCAT FROM LW_FCAT
4 TRANSPORTING EMPHASIZE
5 WHERE FIELDNAME = 'ESLRY'.
- 行颜色
1. 在构成ALV数据的内表中,添加一个char型4位的字段(CLR),用来记录颜色代码
1 TABLES ZEMP_TEST.
2
3 TYPES: BEGIN OF TY_ZEMP.
4 INCLUDE STRUCTURE ZEMP_TEST.
5 TYPES: CLR TYPE CHAR4,"可以控制行颜色
6 END OF TY_ZEMP.
7
8 DATA: IT_ZEMP TYPE STANDARD TABLE OF TY_ZEMP,
9 IW_ZEMP TYPE TY_ZEMP.
2. 循环内表,设置颜色代码
1 LOOP AT IT_ZEMP INTO IW_ZEMP.
2 "员工编号为‘3的行,颜色为红色
3 IF IW_ZEMP-EMPID = '3'.
4 IW_ZEMP-CLR = 'C610'.
5 MODIFY IT_ZEMP FROM IW_ZEMP.
6 CLEAR IW_ZEMP.
7 ENDIF.
8 ENDLOOP.
3. LAYOUT结构中INFO_FIELDNAME的值指定为 CLR
IW_LAYOUT-INFO_FIELDNAME = 'CLR'. "行颜色代码的字段
- 单元格颜色
单元格颜色的设置与行颜色设计基本一致
1. 在构成ALV数据的内表中,添加一个内表 CellColor,用来记录颜色代码,需要设置颜色的字段名
1 TYPES: BEGIN OF TY_ZEMP.
2 INCLUDE STRUCTURE ZEMP_TEST.
3 TYPES: CLR TYPE CHAR4,
4 CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色
5 END OF TY_ZEMP.
CellColor的结构:FNAME ALV 控制: 内部表字段的字段名称
COLOR ALV 控制: 颜色代码 COLOR是一个结构:COL ALV 控制: 颜色
INT ALV 控制: 强化 1/0
INV ALV 控制: 相反 1/0 设置颜色是前景,或者是背景
NOKEYCOL ALV 控制: 覆盖码颜色
2. 循环内表,设置颜色代码
1 LOOP AT IT_ZEMP INTO IW_ZEMP. 2 3 "员工编号为‘3’的行,颜色为红色 4 IF IW_ZEMP-EMPID = '3'. 5 IW_ZEMP-CLR = 'C610'. 6 7 MODIFY IT_ZEMP FROM IW_ZEMP. 8 CLEAR IW_ZEMP. 9 10 ENDIF. 11 12 IF IW_ZEMP-EMPID = '2'. 13 IW_CELLCOLOR-FNAME = 'ENAME'. 14 "员工编号为‘2’的行的‘ENAME’字段颜色为 黄色 15 IW_CELLCOLOR-COLOR-COL = 3. 16 IW_CELLCOLOR-COLOR-INT = 1. 17 IW_CELLCOLOR-COLOR-INV = 0. 18 19 APPEND IW_CELLCOLOR TO IW_ZEMP-CELLCOLOR. 20 MODIFY IT_ZEMP FROM IW_ZEMP. 21 CLEAR IW_ZEMP. 22 23 ENDIF. 24 ENDLOOP.
3. LAYOUT结构中COLTAB_FIELDNAME的值指定为CELLCOLOR
IW_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
最后在调用ALV函数时,设置layout,fieldcat参数
IS_LAYOUT = IW_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
- ALV工具栏
可以自定义工具栏,或者添加标准ALV工具栏,然后去除一些不需要的功能,这样可以保留标准工具栏的功能
1 DATA:BEGIN OF TAB OCCURS 0,
2 FCODE LIKE RSMPE-FUNC,
3 END OF TAB.
4
5 TAB-FCODE = '&OL0'.APPEND TAB.
6 TAB-FCODE = '&OAD'.APPEND TAB.
7 TAB-FCODE = '&AVE'.APPEND TAB.
8
9 SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'
10 EXCLUDING TAB IMMEDIATELY.
- 求和
LW_FCAT-DO_SUM = 'X'. "立即求和,只有I,F,P类型的列可以求和
----------------------------------------------------------
运行效果如下:
在SE38环境下的程序名输入栏输入’DEMO*’后按F4,你可以查到SAP所有的DEMO示例程序,会学到很多ABAP功能的实现方法,
输入’BCALV*’后按F4,你可以查到很多ALV示例程序。
附:ALV的颜色代码:http://blog.csdn.net/wren2004/article/details/3941551