首页 > 其他分享 >ALV 单元格级别控制编辑

ALV 单元格级别控制编辑

时间:2022-10-14 18:05:14浏览次数:40  
标签:STYLELIN STYLE FIELDCAT 级别 单元格 LW LT ALV DATA

效果:

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



标签:STYLELIN,STYLE,FIELDCAT,级别,单元格,LW,LT,ALV,DATA
From: https://blog.51cto.com/u_15680210/5757668

相关文章

  • ALV 红绿灯 单元格背景色 ion SALV_TEST_TOOLTIPS
    这是一个标准Demo程序,效果:可以直接进系统查看代码SALV_TEST_TOOLTIPS......
  • ALV Header Item 多层显示
    代码参考的*&---------------------------------------------------------------------**&ReportYLM_0003*&*&-------------------------------------------------------......
  • ALV 导出电子表格的文件格式固定的删除办法
    在ALV显示中,选择菜单“列表-导出-电子表格”后,会出现下面这样的选择窗口:如果选中了“始终使用选定的格式”,则以后都会使用当前选定的格式(经常是第一项MHTML,可实际上用户希......
  • ALV 相关
    目录:1​​ALV双击弹出新ALV,并响应新ALV事件​​2​​DEMO:ALV 行、列、单元格颜色控制​​3​​Demo: DisableDELETEkeyonKeyboard​​4​​ALV输入数据后点回车自......
  • DEMO:REUSE_ALV_GRID_DISPLAY 复选框 刷新 grid_title
    最近写了几个FunctionALV复选框+刷新的报表,为了方便复制粘贴到其他项目修改,做了个demo。效果选中,删除结构和status代码REPORTzalv_demoDATA:lt_alv_showLIKET......
  • datagridview 表内单元格加按钮
    如果自己添加的按钮或者别控件,点击控件时还要获取单元格的行和列位置,那需要使用系统指定的按钮列的实现方式实现.类似下边的代码//在datagridview中添加button......
  • 事务-隔离级别介绍
    事务-隔离级别介绍概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。存在问题:1.脏读:一......
  • 事务的隔离级别
    事务隔离级别概念:多个事务之间隔离的,相互独立的 但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题存在问题1,......
  • 事务隔离级别演示和管理用户_增删查
    *演示:setglobaltransactionisolationlevelreaduncommitted;starttransaction;--转账操作updateaccountsetbalance=balance......
  • 534事务隔离级别演示1和535事务隔离级别演示2
    事务隔离级别演示1READ_UNCOMMITTED读未提交,即能够读取到没有被提交的数据,所以很明显这个级别的隔离机制无法解决脏读、不可重复读、幻读中的任何一种,因此很少......