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.

效果展示

单元格编辑效果
ABAP ALV和OOALV设置单元格颜色,编辑_第1张图片

颜色添加效果
ABAP ALV和OOALV设置单元格颜色,编辑_第2张图片
叠加效果
ABAP ALV和OOALV设置单元格颜色,编辑_第3张图片

你可能感兴趣的:(解决方案,SAP,ABAP,OOALV)