1.1、控制ALV每行的显示颜色
很多人希望显示报表时能将一些特定条件的行数据以不同颜色来进行区分,使报表展示更加直观。
STEP | 01 首先需要在报表显示的关联内表中新增一个字段,由于存放内表数据某行的颜色属性。
STEP | 02 定义一个ALV报表输出关联的LAYOUT,并将新增的COLOR字段名称作为该LAYOUT的INFO_FNAME字段的赋值。
STEP | 03 在内表中按条件对COLOR字段赋值,以字母C加上一个3位的数字作为ALV的颜色码,例如:C510表示绿色,C610表示红色,C310表示黄色;本例中设置当DISTANC字段为空时,将该行的颜色变为C610红色。代码如下:
*&---------------------------------------------------------------------*
*& Report ZSCREEN07
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zscreen07.
TABLES : spfli.
DATA : BEGIN OF lspfli OCCURS 0. "在内表中新增COLOR作为颜色属性存放字段
INCLUDE STRUCTURE spfli.
DATA : color TYPE char10,
END OF lspfli.
DATA : fieldcat TYPE lvc_t_fcat, "定义Fieldcat对象
grid TYPE REF TO cl_gui_alv_grid, "定义ALV控件名
g_container TYPE scrfname VALUE 'CONT1', "定义本地容器的对象名
is_layout type lvc_s_layo,
g_custom_container TYPE REF TO cl_gui_custom_container. "定义容器对象名
SELECTION-SCREEN BEGIN OF SCREEN 0101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK 10 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : s_carrid FOR spfli-carrid,
s_connid FOR spfli-connid.
SELECTION-SCREEN END OF BLOCK 10.
SELECTION-SCREEN END OF SCREEN 0101.
START-OF-SELECTION.
CALL SCREEN '1001'.
FORM alvshow.
CREATE OBJECT g_custom_container "创建容器对象
EXPORTING
container_name = g_container.
CREATE OBJECT grid
EXPORTING
i_parent = g_custom_container. "创建控件对象
is_layout-info_fname = 'COLOR'. "定义颜色属性字段
CALL METHOD grid->set_table_for_first_display
EXPORTING
i_structure_name = 'SPFLI'
is_layout = is_layout
i_save = 'X'
CHANGING
it_outtab = lspfli[]
it_fieldcatalog = fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1001 INPUT.
CASE sy-ucomm.
WHEN '&EXIT'.
LEAVE TO SCREEN 0.
WHEN 'EXEC'.
SELECT * FROM spfli
INTO CORRESPONDING FIELDS OF TABLE lspfli
WHERE carrid IN s_carrid
AND connid IN s_connid.
lspfli-color = 'C610'.
modify lspfli transporting color where distance <= '3000'. "当distance为空时,显示更改属性
IF g_custom_container IS INITIAL. "检查是否创建容器对象
PERFORM alvshow.
ELSE.
CALL METHOD grid->refresh_table_display.
ENDIF.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1001 OUTPUT.
SET PF-STATUS 'T001'.
* SET TITLEBAR 'xxx'.
ENDMODULE.