0
点赞
收藏
分享

微信扫一扫

ALV 单元格级别控制编辑

kiliwalk 2022-10-14 阅读 52

效果:

ALV 单元格级别控制编辑_可编辑

代码:

DATA:BEGIN OF GS_DATA.
INCLUDE STRUCTURE SPFLI.
DATA: CELL_STYLE TYPE LVC_T_STYL, "为内表添加设置编辑状态所需的字段
END OF GS_DATA.


"alv数据变量
DATA: LT_DATA LIKE TABLE OF GS_DATA.
DATA: LW_DATA LIKE LINE OF LT_DATA.

"alv变量
DATA:
LT_FIELDCAT TYPE LVC_T_FCAT , "显示数据列内表
LW_FIELDCAT LIKE LINE OF LT_FIELDCAT, "显示数据列内表工作区域
L_LAYOUT TYPE LVC_S_LAYO.

DATA: LW_STYLELIN TYPE LVC_S_STYL.


FIELD-SYMBOLS <L_DATA> LIKE LINE OF LT_DATA.

DEFINE MAC_FIELDLOG.
LW_FIELDCAT-FIELDNAME = &1 . "字段名称
LW_FIELDCAT-REPTEXT = &2. "标题

* "设置复选框可编辑
IF &1 EQ 'CARRID'.
LW_FIELDCAT-EDIT = 'X'.
ENDIF.
APPEND LW_FIELDCAT TO LT_FIELDCAT.

CLEAR LW_FIELDCAT.
END-OF-DEFINITION.

START-OF-SELECTION.

SELECT * FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE LT_DATA.

MAC_FIELDLOG:
'CARRID ' '航线承运人ID ',
'CONNID ' '航班连接 Id ',
'COUNTRYFR ' '国家键值 ',
'CITYFROM ' '起飞城市 ',
'AIRPFROM ' '起飞机场 '.



LOOP AT LT_DATA ASSIGNING <L_DATA> .

LW_STYLELIN-FIELDNAME = 'CARRID'. " 需要编辑的列名

IF <L_DATA>-CARRID = 'AA'.
* LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 设置为可编辑状态
ELSE.
LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为可编辑状态
ENDIF.

APPEND LW_STYLELIN TO <L_DATA>-CELL_STYLE.
CLEAR LW_STYLELIN.
ENDLOOP.


L_LAYOUT-STYLEFNAME = 'CELL_STYLE'. " 将内表中的字段名存入显示格式

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'"调用函数

EXPORTING

IT_FIELDCAT_LVC = LT_FIELDCAT

IS_LAYOUT_LVC = L_LAYOUT

TABLES
T_OUTTAB = LT_DATA

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.

这里说明下:

我最开始的时候,没有加下面这句话

*  "设置复选框可编辑
IF &1 EQ 'CARRID'.
LW_FIELDCAT-EDIT = 'X'.
ENDIF.而是直接使用的
IF -CARRID = 'AA'.
LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 设置为可编辑状态
ELSE.
LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为可编辑状态
ENDIF.


发现没起到作用,所有单元格都是不可编辑的

应该是 LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. " 设置为可编辑状态

这句话没起到作用。

具体我没有细研究。

目前测试,把 

IF &1 EQ 'CARRID'.

   LW_FIELDCAT-EDIT          'X'.
 ENDIF.

让该列所有单元格可编辑,然后使用

LW_STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. 

是可以控制不需要编辑的。

这种是可以实现的。


ALV 单元格级别控制编辑_数据_02



举报

相关推荐

0 条评论