原文:Small Fire · ALV控制单元格不可编辑 · ABAP 子专栏 · Small Fire 技术笔记
实现ALV单元格不可编辑
如果已经把ALV中的整列设为可编辑,而只想让这个列中的某些单元格不可编辑,可以使用以下这种方法。
具体单元格可编辑状态设置的主要思想:
- 首先通过 EIDT 参数设置列为可编辑状态;
- 其次对输出内表进行循环将不需要编辑的行设置为不可编辑状态,如此单元格的可编辑属性设置完毕。
需要告诉 layout 哪个字段是 style 字段:layout-stylefname = ‘CELLSTYLES’.
必要条件
- 在输出内表中增加字段
FIELD_STYLE TYPE LVC_T_STYL - 设置
STYLE_FNAME = 'FIELD_STYLE' - 把 style table 添加到显示表,并在 layout structure 中说明 style field。在 field catalog 中把相应的 EDIT 设为‘X’。
实例代码
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.
DATA: T_FIELDCAT TYPE lvc_t_fcat,
S_FIELDCAT TYPE lvc_s_fcat,
X_LAYOUT TYPE lvc_s_layo.
S_FIELDCAT-FIELDNAME = 'ZBQ'. " 设置列可编辑 "
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.
ELSE.
STYLELIN-FIELDNAME = 'ZBQFS'. " 需要编辑的列名"
STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 设置为可编辑状态 "
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
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.