ALV 可编辑性(二)

前言

        前面介绍了Abap ALV的整体可编辑、列可编辑和单元格可编辑,但是有时会有根据行项目某个字段的值来控制其他单元格的可编辑性的需求,其中还涉及到ALV刷新的功能。

实战

        单元格数据修改后自动刷新


 单元格中的数据被修改后,将ALV单元格中的数据立即刷新到ABAP对应的内表中:
        方法一:通过对REUSE_ALV_GRID_DISPLAY函数参数i_grid_settings-edt_cll_cb进行设置:

  i_grid_settings-edt_cll_cb  = 'X' .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
            EXPORTINGi_grid_settings = i_grid_settings


        方法二:通过函数参数I_CALLBACK_USER_COMMAND指定的回调Form的参数slis_selfield进行设置:

FORM user_command USING ucomm LIKE sy-ucommselfield selfield TYPE slis_selfield.
  selfield-refresh = 'X'.
  CASE ucomm.
    WHEN 'UPDATE'.
      PERFORM frm_update.
  ENDCASE.
ENDFORM. 

案例

        展示效果 

        完整代码

*数据定义
DATA:
 BEGIN OF gs_spfli  .
        INCLUDE TYPE spfli.
DATA   cellstyles TYPE lvc_t_styl.
DATA
END OF gs_spfli.

DATA: gt_fieldcat TYPE TABLE OF lvc_s_fcat WITH HEADER LINE,
      gs_layout TYPE  lvc_s_layo.

DATA: gt_data LIKE TABLE OF gs_spfli WITH HEADER LINE.

DATA: gs_style TYPE lvc_s_styl,
      gt_style TYPE lvc_t_styl.
DATA: gt_events TYPE slis_t_event.     "ALV 事件

START-OF-SELECTION.
  PERFORM f_getdata.
  PERFORM f_catalog.
  PERFORM f_get_event.
  PERFORM f_alvshow.

FORM f_getdata .
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_data FROM spfli.
*设置条件置灰列
  LOOP AT gt_data.
    IF gt_data-carrid NE 'AA' .
      gs_style-fieldname = 'DISTANCE'.
      gs_style-style = cl_gui_alv_grid=>mc_style_disabled. "置灰
      APPEND gs_style TO  gt_style.
      gt_data-cellstyles = gt_style.
      MODIFY gt_data.
      CLEAR gt_style.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " F_GETDATA

FORM f_catalog .
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
*     I_BUFFER_ACTIVE        =
      i_structure_name       = 'SPFLI'
*     I_CLIENT_NEVER_DISPLAY = 'X'
*     I_BYPASSING_BUFFER     =
*     I_INTERNAL_TABNAME     =
    CHANGING
      ct_fieldcat            = gt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR gt_fieldcat.
*"对gt_fieldcat属性的修改
  READ TABLE gt_fieldcat  INDEX 13.
  gt_fieldcat-edit = 'X'.
  MODIFY gt_fieldcat  INDEX 13.

  CLEAR gt_fieldcat.
*"对gt_fieldcat属性的修改
  READ TABLE gt_fieldcat  INDEX 16.
  gt_fieldcat-edit = 'X'.
  MODIFY gt_fieldcat  INDEX 16.

*对layout设置可编辑信息内表
  gs_layout-zebra = 'X'.
*  GS_LAYOUT-EDIT = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-stylefname = 'CELLSTYLES'."数据内表中哪列为可编辑信息内表
ENDFORM.                    " F_CATALOG

FORM f_alvshow .
  DATA: ls_grid_settings TYPE  lvc_s_glay.
  ls_grid_settings-edt_cll_cb  = 'X' .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = gs_layout
      it_events          = gt_events
      it_fieldcat_lvc    = gt_fieldcat[]
      i_grid_settings    = ls_grid_settings
    TABLES
      t_outtab           = gt_data[].
ENDFORM.                    " F_ALVSHOW

FORM f_get_event .
  DATA ls_events   TYPE LINE OF slis_t_event.
  ls_events-name = slis_ev_data_changed. "DATA_CHANGED事件
  ls_events-form = 'F_DATA_CHANGED'.
  APPEND ls_events TO gt_events.
ENDFORM.                    " F_GET_EVENT

FORM f_data_changed USING p_data TYPE REF TO cl_alv_changed_data_protocol.
  DATA: l_name(20),ls_cells TYPE lvc_s_modi.
  FIELD-SYMBOLS <fs_value>.
  LOOP AT p_data->mt_mod_cells INTO ls_cells."获取被修改的单元格
    CLEAR gt_data.
    READ TABLE gt_data INDEX ls_cells-row_id."被修改的单元格所对应输出内表行数据
    CONCATENATE 'GT_DATA-' ls_cells-fieldname INTO l_name. "修改之前的数据
    ASSIGN (l_name) TO <fs_value>."修改前的值
    <fs_value> = ls_cells-value.  "修改后的新值
    "实际上不需要修改内表中的数据,因为只要在该Form中不弹出E类消息,执行完后会自动更新内表
    "MODIFY gt_data INDEX ls_cells-row_id.
    IF ls_cells-value > 5.
      gs_style-fieldname = 'DISTANCE'.
      gs_style-style = cl_gui_alv_grid=>mc_style_enabled. "可编辑
      APPEND gs_style TO  gt_style.
      gt_data-cellstyles = gt_style.
      MODIFY gt_data INDEX ls_cells-row_id.
      CLEAR gt_style.
    ENDIF.
  ENDLOOP.
*刷新ALV界面
  PERFORM f_alvrefresh.
ENDFORM.

FORM f_alvrefresh .
  DATA: ls_stbl TYPE lvc_s_stbl,
        lo_grid TYPE REF TO cl_gui_alv_grid.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  "稳定刷新
  ls_stbl-row = 'X'." 基于行的稳定刷新
  " ls_stbl-col = 'X'." 基于列稳定刷新
  IF lo_grid IS NOT INITIAL.
    CALL METHOD lo_grid->refresh_table_display
      EXPORTING
        is_stable = ls_stbl.
  ENDIF.
ENDFORM.                    " F_ALVREFRESH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能|深度学习——PlotNeuralNet简单教程

一、简介 PlotNeuralNet是一个强大的开源Python库,它专为简化和美化神经网络图的绘制而设计 二、安装 需要下载的工具包括&#xff1a;MikTeX&#xff0c;Python代码编辑器&#xff08;这个肯定会有的吧&#xff09;&#xff0c;Git bash&#xff08;可选&#xff09;&#xff…

【设计模式】JAVA Design Patterns——Abstract-document(抽象文档模式)

&#x1f50d; 目的 使用动态属性&#xff0c;并在保持类型安全的同时实现非类型化语言的灵活性。 &#x1f50d; 解释 抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全&#xff0c;并将不同类的属性分离为一组接口 真实世界例子 考虑由多个部…

O2OA翱途开发平台前端API和后端API的访问以及使用

O2OA是一个高度可定制化的企业级开发平台&#xff0c;它的API&#xff08;应用程序接口&#xff09;分为前端和后端&#xff0c;各自有不同的用途&#xff0c;平台为用户开放了全部的后端API供开发者使用&#xff0c;开发者可以根据各类API组织出符合实际业务需求的新服务或者新…

分享一个基于Qt的Ymodem的上位机(GitHub开源)

文章目录 1.项目地址2.Ymodem 协议介绍3.文件传输过程4.使用5.SecureCRT 软件也支持Ymodem6.基于PyQt5的Ymodem界面实现案例 1.项目地址 https://github.com/XinLiGH/SerialPortYmodem 基于VS2019 Qt5.15.2 编译&#xff0c;Linux下编译也可以&#xff0c;这里不做说明。 2.…

C语言指针详解(三)

目录 前言 一. 回调函数是什么&#xff1f; 1.定义 2. 代码示例&#xff1a;计数器 2.1 使用回调函数改造前 2.2 使用回调函数改造后 二. qsort使用举例 1. qsort介绍 2. 使用qsort函数排序整型数据 3. 使用qsort排序结构体数据 三. qsort函数的模拟实现 四. sizeo…

【其他学习参考文档记录】

交叉编译学习参考 nodejs 交叉编译-cliff工作室

污水设备远程监控

随着环保意识的日益增强&#xff0c;污水处理作为城市建设和环境保护的重要一环&#xff0c;越来越受到社会各界的关注。然而&#xff0c;传统的污水处理设备管理方式往往存在着效率低下、响应速度慢、维护成本高等问题。为了解决这些痛点&#xff0c;HiWoo Cloud平台凭借其强大…

N 皇后 - LeetCode 热题 62

大家好&#xff01;我是曾续缘&#x1f9e1; 今天是《LeetCode 热题 100》系列 发车第 62 天 回溯第 8 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 N 皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题…

大模型崛起与就业危机

大模型&#xff0c;特别是像我这样的人工智能&#xff0c;最有可能首先替代那些重复性高、标准化程度高、不需要太多人类直觉和情感判断的工作。这些工作通常包括数据输入、初级数据分析和处理、简单的客户服务任务等。例如&#xff0c;可以自动化的一些岗位包括&#xff1a; 1…

将视觉语言模型训练为智能手机助手

24年4月Agile Loop和德国弗赖堡大学的论文“Training A Vision Language Model As Smartphone Assistant”。 为了解决能够执行各种用户任务的数字助理挑战&#xff0c;该研究重点是基于指令的移动设备控制域。 用大语言模型 (LLM) 的最新进展&#xff0c;本文提出一种可以在移…

如何通过 AWS Managed Apache Flink 实现 Iceberg 的实时同步

AWS Managed Apache Flink &#xff08;以下以 MSF 代指&#xff09;是 AWS 提供的一款 Serverless 的 Flink 服务。 1. 问题 大家在使用 MSF 的时候&#xff0c;可能遇到最大的一个问题就是 MSF 的依赖管理&#xff0c;很多时候在 Flink 上运行的代码&#xff0c;托管到 MAF…

CV每日论文--2024.5.10

1、Attention-Driven Training-Free Efficiency Enhancement of Diffusion Models 中文标题&#xff1a;扩散模型的注意力驱动的训练免费效率增强 简介&#xff1a;扩散模型在生成高质量和多样化图像方面取得了出色的表现,但其卓越性能是以昂贵的架构设计为代价的,特别是广泛使…

1727jsp思想政治活动Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 思想政治活动管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff…

【VTKExamples::Rendering】第十期 TestStippledLine

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TestStippledLine,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. TestStippledLin…

【机器学习】机器学习与人工智能融合新篇章:自适应智能代理在多元化复杂环境中的创新应用与演进趋势

&#x1f512;文章目录&#xff1a; &#x1f4a5;1.引言 &#x1f68b;1.1 机器学习与人工智能的发展背景 &#x1f68c;1.2 自适应智能代理的概念与重要性 &#x1f690;1.3 研究目的与意义 ☔2.自适应智能代理的关键技术 &#x1f6e3;️2.1 环境感知与信息处理技术 …

JavaEE技术之SpringCloud(Nacos注册中心、Nacos配置中心、Sentinel实现熔断与限流)

文章目录 SpringCloud Alibaba1、简介1.1 背景1.2 Nacos主要功能1.3 Nacos和SpringBoot、SpringCloud版本选择 2、Nacos注册中心2.1 案例准备2.2 Nacos注册中心下载启动2.2.1 下载2.2.2 解压启动2.2.3 nacos-server访问测试 2.3 nacos注册中心客户端整合2.3.1 订单服务整合naco…

英伟达解码性能NVDEC

如果你能打开官网&#xff0c;请看这里&#xff1a; NVDEC Application Note 下面是摘录&#xff1a;

python数据可视化:从n个点中挑选m组3个点绘制m个三角形matplotlib.pyplot.triplot()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python数据可视化&#xff1a; 从n个点中挑选m组3个点 绘制m个三角形 matplotlib.pyplot.triplot() [太阳]选择题 以下关于matplotlib.pyplot.triplot()函数说法正确的是&#xff1f; impor…

Python环境变量的访问:从入门到精通

环境变量是操作系统中的一种特殊变量&#xff0c;它允许用户在不修改程序的情况下&#xff0c;通过配置文件来改变程序的行为。在Python中&#xff0c;访问环境变量是一个常见的需求&#xff0c;无论是为了读取配置信息、获取系统信息&#xff0c;还是进行程序调试。本文将详细…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 &#xff08;1&#xff09;安装 node.js &#xff08;2&#xff09;安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求&#xff0c;需要对draw.io进行二次开发&…