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.

ABAP中,可以通过使用ALV表视图(ALV Grid)来为特定的单元格添加颜色提示。下面是一个简单的示例代码,演示如何在ALV Grid中添加颜色提示: 1. 首先,你需要在程序的顶部包含以下两个库: ```abap TYPE-POOLS: slis. INCLUDE: slis. ``` 2. 然后,在程序中定义一个内部表来存储显示的数据: ```abap DATA: lt_data TYPE TABLE OF spfli. ``` 3. 接下来,使用函数模块REUSE_ALV_GRID_DISPLAY来显示ALV Grid: ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid TABLES t_outtab = lt_data. ``` 4. 然后,使用函数模块REUSE_ALV_FIELDCATALOG_MERGE来定义字段目录: ```abap CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-repid i_internal_tabname = 'SPFLI' CHANGING ct_fieldcat = gt_fieldcat[] EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. ``` 5. 接下来,在字段目录中定义一个颜色字段,并设置其属性: ```abap LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fieldcat>). IF <fs_fieldcat>-fieldname = 'CARRID'. <fs_fieldcat>-color-col = 'C'. <fs_fieldcat>-emphasize = 'X'. ENDIF. ENDLOOP. ``` 在上述代码中,我们为字段'CARRID'定义了一个颜色字段,并设置颜色属性为'C',以及强调属性为'X'。 6. 最后,通过调用函数模块REUSE_ALV_GRID_DISPLAY,显示带有颜色提示的ALV Grid: ```abap CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid TABLES t_outtab = lt_data fieldcat = gt_fieldcat. ``` 以上就是一个简单的示例,演示了如何在ABAP中使用ALV Grid来添加颜色提示。你可以根据自己的需求进进一步的定制和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值