行,列,单元格颜色设定

摘要:
在ALV的开发过程中,经常需要为行、列和单元格设置不同的颜色,以帮助用户区分一些意外或重要的信息,例如某些材料的库存不足,以及订单的状态是开放的。有三种类型的颜色设置:1.单元格颜色设置特定单元格的颜色。这需要在ALV输出内部表中添加一个特殊的颜色保存字段。类型为lvc_t_Scol。设置颜色后,调用方法set_color_column()将颜色字段传递给SALV。2.行颜色与单元格颜色设置方法类似,只是不需要指定列名,只需指定行号即可。

在ALV的开发过程中经常需要给行,列,单元格设置不同的颜色,用来帮助用户区分一些意外或重要的信息,比如某些物料缺少库存,某订单的状态是未清之类的。本文就着重介绍如何给SALV设置颜色。

颜色设定的有以下三种:

1,单元格颜色

为特定的单元格设置颜色,这需要在ALV输出内表中添加一个专门保存颜色的字段,类型为lvc_t_scol,设置完颜色后(包括列名字,行号码),通过调用方法set_color_column()将颜色字段传递给SALV。

2016-09-13_13-59-34

2016-09-13_14-00-14

2,行颜色

与单元格颜色设置方法类似,只是不用指定列名字,只要指定行号就可以了。

2016-09-13_14-00-43

3,列颜色

相对简单,只要在取得列对象引用(cl_salv_column_table )后,通过调用方法set_color()就能实现。

2016-09-13_14-01-15

本实例中,要实现设置sale document type列第三行颜色为红色,create on列为黄色,第五行为绿色

ALV中颜色色号请参照-->ALV单元格颜色代码

SALV教程2-添加标准状态栏(status)代码的基础上添加方法set_colors().

新的UML流程图如下:

salv_colors

完整代码如下:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
*&---------------------------------------------------------------------*
*& 一个简单的通过类CL_SALV_TABLE生成SALV的例子
*&---------------------------------------------------------------------*
REPORT z_salv_8.
*
*----------------------------------------------------------------------*
*       CLASS lcl_report DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_reportDEFINITION.
*
  PUBLIC SECTION.
*
*   定义SALV输出内表
    TYPES:BEGIN OF ty_vbak,
             vbeln   TYPE vbak-vbeln,
             erdat   TYPE erdat,
             auart   TYPE auart,
             kunnr   TYPE kunnr,
             t_colorTYPE lvc_t_scol,  "设置单元格颜色用
           END OF ty_vbak.
*
    TYPES: ty_t_vbakTYPESTANDARD TABLE OF ty_vbak.
    DATA: t_vbakTYPESTANDARD TABLE OF ty_vbak.
*
*   ALV reference
    DATA: o_alvTYPEREF TO cl_salv_table.
*
    METHODS:
*     抽取数据
      get_data,
*
*     生成输出内容
      generate_output.
*
*$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
*
* 定义private method来设定SALV不同特性
  PRIVATE SECTION.
    METHODS:
      set_pf_statusCHANGING co_alvTYPEREF TO cl_salv_table.
    METHODS:
      set_colorsCHANGING co_alv  TYPEREF TO cl_salv_table
                          ct_vbakTYPE ty_t_vbak.
 
*$*$*.....CODE_ADD_1 - End....................................1..*$*$*
 
ENDCLASS.                    "lcl_report DEFINITION
 
*----------------------------------------------------------------------*
*       CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
* 类实现
CLASS lcl_reportIMPLEMENTATION.
*
  METHOD get_data.
*   抽取数据
    SELECT vbeln
           erdat
           auart
           kunnr
      INTOCORRESPONDING FIELDS OF TABLE t_vbak
      FROM vbak
           UP TO20ROWS.
*
  ENDMETHOD.                    "get_data
 
*.......................................................................
  METHOD generate_output.
*   New ALV instance
*   We are calling the static Factory method which will give back
*   the ALV object reference.
*
* exception class
    DATA: lx_msgTYPEREF TO cx_salv_msg.
    TRY.
        cl_salv_table=>factory(
          IMPORTING
            r_salv_table= o_alv
          CHANGING
            t_table      = t_vbak).
      CATCH cx_salv_msgINTO lx_msg.
    ENDTRY.
*
*$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
*
*    In this area we will call the methods which will set the
*      different properties to the ALV
*   调用status设置方法
    CALL METHOD set_pf_status
      CHANGING
        co_alv= o_alv.
 
*   调用设置颜色用方法
    CALL METHOD set_colors
      CHANGING
        co_alv  = o_alv
        ct_vbak= t_vbak.
*$*$*.....CODE_ADD_2 - End....................................2..*$*$*
*
*
*   调用Display方法将数据输出到屏幕上
    o_alv->display().
*
  ENDMETHOD.                    "generate_output
*
*$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
*
*    In this area we will implement the methods which are defined in
*      the class definition
* status设置方法实现
  METHOD set_pf_status.
 
    DATA: lo_functionsTYPEREF TO cl_salv_functions_list.
*   设置默认的标准状态栏
    lo_functions= co_alv->get_functions().
    lo_functions->set_default( abap_true).
 
  ENDMETHOD.
  METHOD set_colors.
*
*.....Color for COLUMN.....
    DATA: lo_cols_tabTYPEREF TO cl_salv_columns_table,
          lo_col_tab  TYPEREF TO cl_salv_column_table.
    DATA: ls_colorTYPE lvc_s_colo.    " Colors strucutre
*
*   get Columns object
    lo_cols_tab= co_alv->get_columns().
*
    INCLUDE<color>.
*
*   取得 ERDAT列对象 & 设定黄颜色
    TRY.
        lo_col_tab?= lo_cols_tab->get_column('ERDAT').
        ls_color-col=col_total.  "色号
        lo_col_tab->set_color( ls_color).
      CATCH cx_salv_not_found.
    ENDTRY.
*
*.......Color for Specific Cell & Rows.................
*   Applying color on the 3rd Row and Column AUART
*   Applying color on the Entire 5th Row
*
    DATA: lt_s_colorTYPE lvc_t_scol,
          ls_s_colorTYPE lvc_s_scol,
          la_vbak    LIKELINEOF ct_vbak,
          l_count    TYPE i.
*
    LOOP AT ct_vbakINTO la_vbak.
      l_count= l_count+1.
      CASE l_count.
*      设定AUART字段,第三行的单元格颜色
        WHEN3.
          ls_s_color-fname     ='AUART'.
          ls_s_color-color-col=col_negative.
          ls_s_color-color-int=0.
          ls_s_color-color-inv=0.
          APPEND ls_s_colorTO lt_s_color.
          CLEAR  ls_s_color.
*
*       设定第五行颜色,
*       不赋值列名字就是对于整行颜色的设置,
        WHEN5.
          ls_s_color-color-col=col_positive.
          ls_s_color-color-int=0.
          ls_s_color-color-inv=0.
          APPEND ls_s_colorTO lt_s_color.
          CLEAR  ls_s_color.
      ENDCASE.
*     Modify that data back to the output table
      la_vbak-t_color= lt_s_color.
      MODIFY ct_vbakFROM la_vbak.
      CLEAR  la_vbak.
      CLEAR  lt_s_color.
    ENDLOOP.
*
*   We will set this COLOR table field name of the internal table to
*   COLUMNS tab reference for the specific colors
    TRY.
        lo_cols_tab->set_color_column('T_COLOR').
      CATCH cx_salv_data_error.                         "#EC NO_HANDLER
    ENDTRY.
*
  ENDMETHOD.                    "set_colors
 
*$*$*.....CODE_ADD_3 - End....................................3..*$*$*
*
ENDCLASS.                    "lcl_report IMPLEMENTATION
 
START-OF-SELECTION.
 
  DATA: lo_reportTYPEREF TO lcl_report.
 
  CREATE OBJECT lo_report.
* 抽取数据
  lo_report->get_data().
* 生成SALV
  lo_report->generate_output().

运行显示如下:行,列,单元格的颜色都设置成功。

2016-09-13_13-37-43

以上。

 

免责声明:文章转载自《行,列,单元格颜色设定》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ToString和Convert.ToString处理null值JSP不支持EL表达式的解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

25 Zabbix系统数据表结构介绍

点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 25 Zabbix系统数据表结构介绍自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表自学Zabbix之路15.2 Zabbix数据库表结构简单解析-Items表自学Zabbix之...

MySQL3:索引

什么是索引 索引是对数据库表中一列或者多列的值进行排序的一种结构,所引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜索数据文件,而不必查看所有数据。 索引的含义和特点 索引是一个单独的、存储在磁盘上的...

vue 查询分页

后端用的flask,前端vue,查询结果展示以及分页 如图: 代码如下: 前端: 1 <template> 2 <div> 3 <el-row> 4 <el-col :span="18"> 5 <el...

java使用freemarker模板导出word(带有合并单元格)文档

来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并单元格的,可是查了好久都没有自己想要的。研究了几天其实挺简单的,在这儿我就简单的介绍一下吧!(此方法只是一种思路,借鉴者还有根据需求来具体写代码) 一、准备...

c#操作Word文件 导出数据到word文档 (table 书签方式)

1.添加一个table 显示成问答两列 using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using As...

查询速度慢的原因很多,常见如下几种

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有 创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock,sp_who,活动的用户查看,原因...