ABAP - Function ALV 09 颜色设置(行、列、单元格)
用户有些需求要求ALV某些数值要用颜色着重的体现出来。 ALV 颜色设置有行颜色、列颜色、单元格颜色 颜色值的设置:C+X(1~7)X(是否加重:1/0)X(是否反色:1/0),附:颜色代码 设置列颜色:Fieldcat参数emphasize赋值 ** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat LIKE LINE OF gt_fieldcat.
gs_fieldcat-emphasize = 'C6'."设置列颜色
APPEND gs_fieldcat TO gt_fieldcat.
设置行颜色:1.内表增加一个字段,char类型,长度为4位->2.内表赋值->3.设置Layout参数INFO_FNAME 赋值,注意: REUSE_ALV_GRID_DISPLAY定义的Layout结构的字段参数是INFO_FIELDNAME "1.内表结构定义
TYPES:BEGIN OF ty_data,
color1 TYPE c LENGTH 4, "颜色字段
END OF ty_data.
"2.内表赋值
LOOP AT gt_data INTO gw_data.
IF gw_data-score < 60.
gw_data-color = 'C6'.
ENDIF.
MODIFY gt_data FROM gw_data.
ENDLOOP.
"3.Layout参数字段赋值
gs_layout-info_fname = 'COLOR1'
设置单元格颜色:1.内表结构增加一个类型为LVC_T_SCOL内表的字段>2.内表赋值->3.设置Layout参数CTAB_FNAME 赋值,注意:REUSE_ALV_GRID_DISPLAY定义的Layout结构的字段参数是CTAB_FIELDNAME "1.内表结构定义
TYPES:BEGIN OF ty_data,
color2 TYPE lvc_t_scol, "内表参数
END OF ty_data.
"单元格颜色结构变量定义
DATA gs_color TYPE lvc_S_scol.
"2.内表赋值
gs_color-fname = 'SEL'. "单元格颜色设置-选择SEL增加颜色
gs_color-color-col = 6. "单元格颜色设置-底色为红色
gs_color-color-int = 1. "单元格颜色设置-加重
gs_color-color-inv = 0. "单元格颜色设置-不反色
gs_color-NOKEYCOL = '1'."覆盖单元格原色
APPEND gs_color TO gw_data-color2.
CLEAR: gs_color.
"3.Layout参数赋值
gs_layout-ctab_fname = 'COLOR2'."单元格颜色参数
完整代码 TYPES:BEGIN OF ty_data,
sel TYPE char1,
light TYPE iconname,
name TYPE char10,
score TYPE p LENGTH 2 DECIMALS 1,
remark TYPE c LENGTH 20,
color1 TYPE c LENGTH 4,
color2 TYPE lvc_t_scol,
END OF ty_data.
DATA gt_data TYPE TABLE OF ty_data.
DATA gw_data TYPE ty_data.
** Layout 变量定义
DATA gs_layout TYPE lvc_s_layo.
** 颜色字段变量定义
DATA gs_color TYPE lvc_S_scol.
** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat LIKE LINE OF gt_fieldcat.
** FieldCat的宏
DATA gv_pos TYPE i.
DEFINE %%add_fieldcat.
gv_pos = gv_pos + 1.
gs_fieldcat-col_pos = gv_pos.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_m = &2.
CASE &1.
WHEN 'SEL'.
gs_fieldcat-checkbox = 'X'. "当做选择框显示
gs_fieldcat-edit = 'X' . "该字段可以编辑
WHEN 'SCORE'.
gs_fieldcat-emphasize = 'C6'."设置列颜色
ENDCASE.
APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.
START-OF-SELECTION.
PERFORM get_data.
PERFORM dis_falv.
FORM get_data.
gt_data[] = VALUE #(
( sel = '' light = '' name = 'TOM' score = '58')
( sel = '' light = '' name = 'JEERY' score = '98')
( sel = '' light = '' name = 'MASTER' score = '68')
).
LOOP AT gt_data INTO gw_data.
IF gw_data-score < 60.
gw_data-light = icon_red_light.
gw_data-remark = '不及格'.
gw_data-color1 = 'C6'.
ELSEIF gw_data-score >= 60 AND gw_data-score < 85.
gw_data-light = ICON_yellow_LIGHT.
gw_data-remark = '良好'.
ELSEIF gw_data-score >= 85.
gw_data-light = ICON_green_LIGHT.
gw_data-remark = '优秀'.
gs_color-fname = 'SEL'. "单元格颜色设置-选择SEL增加颜色
gs_color-color-col = 6. "单元格颜色设置-底色为红色
gs_color-color-int = 1. "单元格颜色设置-加重
gs_color-color-inv = 0. "单元格颜色设置-不反色
gs_color-NOKEYCOL = '1'."覆盖单元格原色
APPEND gs_color TO gw_data-color2.
CLEAR: gs_color.
ENDIF.
MODIFY gt_data FROM gw_data.
ENDLOOP.
ENDFORM.
FORM dis_falv.
** Fieldcat字段映射处理
%%add_fieldcat:'SEL' '选择', "( 前面字段值不可变 后面字段描述可变 每一行都是)
'LIGHT' '状态',
'REMARK' '备注',
'NAME' '姓名',
'SCORE' '分数'.
** Layout布局处理
gs_layout-cwidth_opt = 'X'. "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)
gs_layout-zebra = 'X'. "斑马纹输出
gs_layout-info_fname = 'COLOR1'."行颜色参数
gs_layout-ctab_fname = 'COLOR2'."单元格颜色参数
** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,Status
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
TABLES
t_outtab = gt_data[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM.
FORM frm_set_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'.
ENDFORM.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1474889.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!