ABAP ALV和OOALV设置单元格颜色,编辑

首先给大家分享一篇博客:
REUSE_ALV_GRID_DISPLAY_LVC-可编辑单元格

**需求:**我是想实现某个单元格可根据数据来判断是否是可以进行编辑的或要添加一个什么样的颜色.

我们需要用到下面的三个结构
ALV 控制: 单元格的类型表:LVC_T_STYL
ALV 控制: 字段名称 + 类型:LVC_S_STYL
ALV 控制: 单元格颜色表:LVC_T_SCOL

单元格编辑

1.下面的zstyle这个字段就是用来编辑这个单元格是否需要编辑的

"输出结构
TYPES: BEGIN OF ty_output.
        INCLUDE STRUCTURE ztsd0001. "内表
TYPES  zstyle     TYPE lvc_t_styl. "编辑状态字段
TYPES: END OF ty_output.

DATA: gt_output TYPE TABLE OF ty_output. "输出内表
DATA: gs_output TYPE ty_output. "输出工作区

2.在layout中设置上面的那个字段.

 gs_layout-stylefname = 'ZSTYLE'. "用于改变字段属性

3.在FIELDCAT中设置你要想实现那一列的效果,要把它设置成可编辑的,对是设置整列可编辑的(后续要经过判断在设置具体到那个单元格可编辑)

    IF &1 EQ 'aufnr2 '.  
      GS_FIELDCAT-EDIT = 'X'.
    ENDIF.

4.最后就是在展示ALV的前一步进行实现具体单元格可编辑的效果.

DATA:
        lt_celltab TYPE lvc_t_styl,
        ls_celltab TYPE lvc_s_styl.
        
         "这个字段要和你在FIELDCAT 中设置那个列可编辑的字段,要对应
        ls_celltab-fieldname = 'AUFNR2'.  
        
 "下面这两行是常量, 你可以选择给他固定值,或者直接调用cl_gui_alv_grid中的常量
  ls_celltab-style = cl_gui_alv_grid=>mc_style_disabled. "不可编辑  初始值 '00100000'
"  ls_celltab-style = cl_gui_alv_grid=>MC_STYLE_ENABLED.    "可编辑  初始值 '00080000'

  INSERT ls_celltab INTO TABLE lt_celltab. 
  INSERT LINES OF lt_celltab INTO TABLE gs_output-zstyle.   
  CLEAR:ls_celltab,lt_celltab .
  
"判断该内表汇总字段aufnr2为不为初始化的 实现不可修改
"(也就是说这个字段有值的就不要进行可编辑,没有的可以进行编辑)
  LOOP AT gt_output INTO DATA(ls_out).
    IF ls_out-aufnr2 IS not INITIAL.
      MODIFY gt_output INDEX sy-tabix FROM gs_output TRANSPORTING zstyle.
    ENDIF.
  ENDLOOP.
  CLEAR:ls_out, gs_output.

到这里就完成了

单元格/行-颜色

1.下面的CLR行颜色代码的字段,cellcolor 用于单元格颜色.

"输出结构
TYPES: BEGIN OF ty_output.
        INCLUDE STRUCTURE ztsd0001. "内表
TYPES  cellcolor TYPE lvc_t_scol. "单元格颜色
TYPES  clr TYPE char04. "行颜色代码的字段
TYPES: END OF ty_output.

DATA: gt_output TYPE TABLE OF ty_output. "输出内表
DATA: gs_output TYPE ty_output. "输出工作区

2.需要在layout总进行设置

gs_layout-info_fname = 'CLR'.  "行颜色代码的字段
gs_layout-ctab_fname = 'CELLCOLOR'. "单元格颜色内表字段

3.最后就是在展示ALV的前一步进行实现具体单元格/行的效果.

LOOP AT gt_output INTO gs_output.
"设置某一行为红色
    IF gs_output-aufnr = ''.
      gs_output-clr = 'C610'.
      MODIFY gt_output FROM gs_output TRANSPORTING clr.
      CLEAR gs_output.
    ENDIF.
    
"设置某一个单元格为黄色    
    IF gs_output-aufnr <> ''.
      lw_cellcolor-fname = 'AUFNR'.
      "订单编号为‘’的行的‘AUFNR’字段颜色为 黄色
      lw_cellcolor-color-col = 3.
      lw_cellcolor-color-int = 1.
      lw_cellcolor-color-inv = 0.

      APPEND lw_cellcolor TO gs_output-cellcolor.
      MODIFY gt_output FROM gs_output.
      CLEAR lw_cellcolor.
    ENDIF.
    CLEAR gs_output.
  ENDLOOP.

效果展示

单元格编辑效果
在这里插入图片描述

颜色添加效果
在这里插入图片描述
叠加效果
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ALV单元格动态可编辑ABAP技术在ALV报表上的一个重要扩展。ALVABAP List Viewer)是SAP系统中常用的报表显示工具,可以方便地展示和处理大量的数据。但是在默认情况下,ALV报表的单元格是不可编辑的,用户只能查看报表数据而无法进行修改。 为了满足用户对报表数据进行动态修改的需求,开发人员通过对ALV控件进行扩展,使其支持单元格的动态可编辑功能。这样用户可以直接在报表上进行数据编辑,无需打开数据源进行修改。 实现ALV单元格动态可编辑的扩展需要进行如下步骤: 1. 定义ALV报表的显示结构。 首先,需要定义ALV报表的显示结构,包括字段名、字段类型、长度等信息。 2. 扩展ALV函数模块。 在ALV函数模块中,需要添加相应的功能模块来支持单元格的动态可编辑。通过修改ALV函数模块的代码,实现对报表数据的修改和保存。 3. 增加用户交互接口。 为了方便用户进行数据修改,可以在报表上添加一些用户交互接口,比如勾选框、输入框等。用户可以通过这些接口直接修改报表数据,并进行保存操作。 4. 编写逻辑处理程序。 最后,需要编写逻辑处理程序,处理用户的修改操作。这个程序会根据用户输入的数据,更新相应的报表数据,并将修改后的数据保存回数据库中。 通过以上步骤的扩展,用户可以实现在ALV报表中直接进行数据编辑的功能。这样,用户可以更加方便地进行数据修改和保存,提高工作效率。同时,ALV单元格动态可编辑的扩展也为定制化的报表需求提供了更多的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值