在使用ALV显示列表的过程中,我们可以使用IT_FIELDCAT参数设置某一个字段的可编辑状态。但是,要设置具体的单元格的可编辑状态对于对ALV不是很了解的人来说是一个头大的问题。

具体单元格可编辑状态设置的主要思想:首先通过EIDT参数设置列为可编辑状态;其次对输出内表进行循环将不需要编辑的行设置为不可编辑状态,如此单元格的可编辑属性设置完毕。下面粘贴简要代码。

部分代码:

DATA: BEGIN OF ITAB OCCURS 0,

ZQRFH_ICON TYPE STRING,

ZLDATE TYPE ZLDATE,

ZLUSR TYPE ZLUSR,

K TYPE STRING,

FIELD_STYLE TYPE LVC_T_STYL, " 为内表添加设置编辑状态所需的字段

END OF ITAB.

S_FIELDCAT-FIELDNAME = 'ZBQFS'. " 设置列可编辑

S_FIELDCAT-EDIT = 'X'.

APPEND S_FIELDCAT TO T_FIELDCAT.

DATA STYLELIN TYPE LVC_S_STYL.

LOOP AT ITAB.

IF ITAB-ZXMDM = 'D' OR ITAB-ZXMDM = 'F' OR ITAB-ZXMDM = 'H'.

STYLELIN-FIELDNAME = 'ZBQFS'. " 需要编辑的列名

STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态

APPEND STYLELIN TO ITAB-FIELD_STYLE.

CLEAR STYLELIN.

MODIFY ITAB.

ENDIF.

endloop.

X_LAYOUT-STYLE_FNAME = 'FIELD_STYLE'. " 将内表中的字段名存入显示格式

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'"调用函数

EXPORTING

IT_FIELDCAT_LVC    = T_FIELDCAT

IS_LAYOUT_LVC      = X_LAYOUT

TABLES

T_OUTTAB           = ITAB_LB

EXCEPTIONS

PROGRAM_ERROR      = 1

OTHERS             = 2.

控制单格的比较麻烦呢.要用OO了写法了.

给个OO的例子吧.
REPORT ZALV_EDIT.
TYPE-POOLS: SLIS.
*- Fieldcatalog
DATA: IT_FIELDCAT TYPE LVC_T_FCAT.
DATA: X_FIELDCAT TYPE LVC_S_FCAT.
DATA: X_LAYOUT TYPE LVC_S_LAYO.

"第1步:用操作具体单元的是否可编辑的内表和工作区

DATA: LS_EDIT TYPE LVC_S_STYL,
      LT_EDIT TYPE LVC_T_STYL.
"第2步:在内表定义添加字段,用于控制具体行的具体单元是否可编辑
DATA: BEGIN OF IT_VBAP OCCURS 0,
  VBELN LIKE VBAP-VBELN,
  POSNR LIKE VBAP-POSNR,
  STYLE TYPE LVC_T_STYL, "FOR DISABLE
END OF IT_VBAP.
DATA: LS_OUTTAB LIKE LINE OF IT_VBAP.
SELECT VBELN  POSNR
  UP TO 100 ROWS
  INTO CORRESPONDING FIELDS OF TABLE IT_VBAP
FROM VBAP.

DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
X_FIELDCAT-SELTEXT = 'VBELN'.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '10'.
x_fieldcat-ref_field = 'VBELN'.
x_fieldcat-ref_table = 'VBAK'.
APPEND X_FIELDCAT TO IT_FIELDCAT.

CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SELTEXT = 'POSNR'.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '5'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.

"第3步:设置第六行两个单元都不能输入
SY-TABIX = 6.
LS_EDIT-FIELDNAME = 'VBELN'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 10.
INSERT LS_EDIT INTO TABLE LT_EDIT.

LS_EDIT-FIELDNAME = 'POSNR'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 6.
INSERT LS_EDIT INTO TABLE LT_EDIT.

INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-STYLE.

"第4步:将控制数据写到内表

MODIFY IT_VBAP INDEX SY-TABIX FROM LS_OUTTAB TRANSPORTING STYLE .

"设置第10行只有项目不能输入

clear LS_OUTTAB.
refresh LT_EDIT.
LS_EDIT-FIELDNAME = 'POSNR'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 6.
INSERT LS_EDIT INTO TABLE LT_EDIT.

INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-STYLE.

SY-TABIX = 10.

"将控制数据写到内表

MODIFY IT_VBAP INDEX SY-TABIX FROM LS_OUTTAB TRANSPORTING STYLE .

"第5步:设置控制字段
X_LAYOUT-STYLEFNAME = 'STYLE'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
    I_CALLBACK_PROGRAM = SY-REPID
    IS_LAYOUT_LVC      = X_LAYOUT
    IT_FIELDCAT_LVC    = IT_FIELDCAT
  TABLES
    T_OUTTAB           = IT_VBAP[]
  EXCEPTIONS
    PROGRAM_ERROR      = 1
    OTHERS             = 2.
IF SY-SUBRC NE 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

sap abap alv 实现某行,单元格可编辑与不可编辑 REUSE_ALV_GRID_DISPLAY_LVC相关推荐

  1. Excel如何将一个单元格数据拆分为多行单元格

    今天跟大家分享一下Excel如何将一个单元格数据拆分为多行单元格 1.如下图是从文档中复制的数据,现在我们想要将单元格中的数据按照空格拆分为多行单元格数据. 2.首先我们选中数据单元格区域 3.然后点 ...

  2. 如何将Excel多行单元格文字合并到一个单元格中

    如何将Excel多行单元格文字合并到一个单元格中 参考网址:https://jingyan.baidu.com/article/ed15cb1b28042c5ae369819f.html 1.打开需要 ...

  3. Aspose.cells导出Excel合并行单元格(Datatable)

    //前台ajax返回成功的数据 $.ajax({             url: "地址?r=" + Math.random,             type: "p ...

  4. 云表平台中设置明细行单元格样式

    当我们的业务明细表,有多行数据的同时,我们就非常需要有一个公式去帮我们快速识别出那些数据有填写不合格.填写不规范.输入量级不够等等的判断,下面就用这个单元格去实现一个,采购入库单,数量输入超过500就 ...

  5. 给第一行单元格赋值WPS JS获取工作表的总行数WPS JS获取工作表的总行数

    戳我,了解更多相关办公的小技巧 给第一行单元格赋值 1.在计算机中有一种ASCII编码,其中A在计算机中的表示的数字是65,a的ascii码是97,b的ascii码是98. 2.从A1到F1可以看到第 ...

  6. 给第一行单元格赋值 + WPS JS获取工作表的总行数 + WPS JS获取工作表的总行数

    戳我,了解更多相关办公的小技巧 给第一行单元格赋值 1.在计算机中有一种ASCII编码,其中A在计算机中的表示的数字是65,a的ascii码是97,b的ascii码是98. 2.从A1到F1可以看到第 ...

  7. 如何在 SAP ABAP ALV 报表里以交通灯的方式显示某一列的值

    在本教程的这篇步骤里,我们介绍了 ALV 层次顺序表的输出实现明细. SAP ABAP ALV 层次顺序表如何使用双表头(Multiple Headers)进行数据输出 本文介绍如何在 ALV 层次顺 ...

  8. PHPExcel 设置单元格受保护,不可编辑,或需要密码

    设置全表受保护,不能编辑 $objPHPExcel = new \PHPExcel();$objPHPExcel->getActiveSheet()->getProtection()-&g ...

  9. SAP ABAP ALV控制显示的网格中的每一个字段属性

    字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.常用的字段如下: row_pos:默认值为0,可选值为1.2.3,既最大分3级别显示 field ...

最新文章

  1. colab中的变量怎么读取_Fizyr Retinanet在Colab中进行目标检测
  2. centos7 nat模式配置静态ip_Linux不进入网卡配置文件更改静态ip
  3. (转载)机器学习知识点(十四)EM算法原理
  4. 在linux上实现cgi内容在网页上显示
  5. debug idea js_IntelliJ IDEA 配置chrome插件调试js代码 - 狂奔的熊二 - 博客园
  6. 使用eclipse svn塔建(配置)时的一点点心得
  7. Android Studio Flutter 调试技巧 Flutter Inspector 提升你的维护开发效率 轻松定位复杂嵌套Widget代码位置
  8. 在Windows 2000下优化Oracle9i性能
  9. C++进阶教程之信号处理
  10. LINUX使用sed修改文件,如果包含变量,需要使用双引号
  11. 集成学习——机器学习(周志华)
  12. 一个小时,零基础入门,看完这篇30行代码 教你实现百度换肤!
  13. Nvivo简介、学习经验分享及教程
  14. 硬时间窗 遗传算法 matlab,基于遗传算法的多种运输工具或带时间窗的路径优化问题(VRP)的求解(MATLAB)...
  15. 0CTF 2016 RSA?(未完成)
  16. Python入门(二)-编程环境
  17. 量子信息-学习记录13
  18. 创意相册、3D立体相册
  19. 艾森豪威尔时间管理法则
  20. SpringAOP切点表达式

热门文章

  1. (文末有彩蛋)最新版快手去水印遭遇滑块验证,对刚还是绕行?最新快手去水印解析原理与源码。
  2. SCOI 2017 酱油记
  3. 网购秒杀系统架构设计分析
  4. 使命召唤mod工具下载地址
  5. python关键词分类_python多分类关键词搜索
  6. Java构造方法(与类名相同的方法)、类方法、类变量、实例方法、实例变量
  7. 男生诡异世界观,是不是跟你想的不一样~
  8. golang值类型与引用类型的区别
  9. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day28,字节跳动算法工程师面试
  10. 报告称我国总负债或达50万亿 最大缺口是养老金