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

在使用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.






  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: reuse_alv_grid_display_lvc是一个ABAP函数模块,用于在SAP系统中显示ALV报表。它可以重复使用已经定义的ALV网格显示控件,并将数据填充到网格中。此函数模块可以通过传递不同的参数来控制网格的外观和行为,例如列宽度、排序、筛选和分页等。它是SAP开发人员在开发报表时经常使用的一个重要工具。 ### 回答2: reuse_alv_grid_display_lvc是一种SAP ABAP程序中的函数模块,用于在ALV Grid中显示数据。ALVABAP List Viewer)Grid用于以表格形式显示大量数据,并允许用户对数据进行排序、筛选、编辑以及其他交互式操作。 reuse_alv_grid_display_lvc函数模块一般用于在SAPABAP应用程序中的列表显示,该函数将数据集合和ALV的元数据传递给ALV Grid并生成可在SAP GUI中显示的列表。该函数模块的参数可以控制各种风格、排列方式和格式,以便使列表与应用程序的其余部分相匹配。通过使用reuse_alv_grid_display_lvc函数模块,可以快速地生成一个定制的和基于事件驱动的列表GUI,以满足业务需求。 reuse_alv_grid_display_lvc函数模块使用的基本步骤如下: 1. 定义数据表和数据类型,列出要在ALV Grid中显示的每个字段。 2. 创建一个包含字段信息和数据的内表。 3. 调用ALV Grid的数据提取方法,将内表中的数据传递给ALV Grid。 4. 定义一些参数,如is_layout(包含关于呈现实例的设置)、it_events(用于响应事件)等。 5. 最后,调用reuse_alv_grid_display_lvc函数模块。 在使用这个函数模块时,需要注意以下几点: 1. reuse_alv_grid_display_lvc函数模块只在SAP ABAP平台上可用。 2. 函数模块会自动根据数据类型和字段信息创建列表。 3. 大量数据情况下,应考虑采用分页显示,以提高系统性能。 4. 要确保为ALV Grid提供足够的空间,以便将广泛列显示在表格中。 总而言之,reuse_alv_grid_display_lvc函数模块是一种强大的工具,可用于在SAP ABAP应用程序中生成高度可定制的表格列表GUI。通过灵活配置参数,可以生成符合业务需求的列表,并且提供对数据的完整控制,为业务分析和决策提供了更好的支持。 ### 回答3: reuse_alv_grid_display_lvc是一种非常方便的SAP ABAP函数模块,常用于显示ALV表格。ALV 表格是SAP 系统中一个非常重要的组件,常用于显示并编辑大量的数据。该函数模块可以帮助SAP ABAP开发人员在程序设计时能够以一种更为高效便捷的方式使用ALV表格。 使用reuse_alv_grid_display_lvc函数模块可以显著地提高SAP系统中的数据处理速度,同时降低在大型数据集上进行数据处理时的复杂性。不论是对于初学者或者有经验的SAP ABAP开发人员,该函数模块都是非常实用的。 使用该函数模块的时候,可以定义一个内部表作为数据组件,使用ALV Grid Control来展现数据。函数模块提供了非常强大的定制选项,包括自定义排序和筛选规则以及其他加载选项。 使用reuse_alv_grid_display_lvc需要遵循一些指定的规则和步骤。一般情况下,程序员需要在程序开始的时候定义一个TYPE TABLE结构,并使用一个循环结构来循环访问整个数据集。 当使用该函数模块时,需要特别注意内存使用情况。由于ALV表格非常灵活,所以在处理大量数据的时候可能会占用大量内存。因此,开发人员应该注意分配足够的内存以避免出现内存溢出等错误。 总之,reuse_alv_grid_display_lvcSAP ABAP开发中一种非常实用的工具。使用它能够极大地提高我们在SAP系统中处理数据的效率,并降低数据处理的复杂度。由于其强大的可定制选项和易使用的特性,该函数模块是值得SAP ABAP开发人员深入研究的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值