ABAP - Function ALV 05 添加选择框列、全选、取消全选

  • 很多用户不习惯原生GRID的选择模式,所以业务需要用到自定义的选择框来进行数据的操作,显示效果如图所示,增加一条选择列,且配置全选和全选全选的按钮功能,如下图所示。

  • 实现这种功能需要用到Fieldcat的参数控制以及GUI状态的配置和处理 
  • 1.Fieldcat参数控制,将改成设置成选择框的样式,且该列可以被编辑
** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,gs_fieldcat LIKE LINE OF gt_fieldcat.** FieldCat的宏
DATA gv_pos TYPE i.DEFINE %%add_fieldcat.gv_pos = gv_pos + 1.gs_fieldcat-col_pos = gv_pos.gs_fieldcat-fieldname = &1.gs_fieldcat-scrtext_m = &2.CASE &1.        "根据fieldname字段给结构做赋值控制WHEN 'SEL'.gs_fieldcat-checkbox = 'X'. "该列选择框显示gs_fieldcat-edit     = 'X'. "该列可以编辑ENDCASE.APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.** Fieldcat字段映射处理%%add_fieldcat:'EBELN'    '采购单号',  "( 前面字段值不可变 后面字段描述可变 每一行都是)'EBELP'    '采购订单行号','SEL'      '选择'.
  • 2.GUI状态的配置和处理。需要在GUI状态添加自定义按钮,并且做数据更新。ALV增加自定义按钮参考:https://mp.csdn.net/mp_blog/creation/editor/136279698
FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield."应用方法将修改ALV的数据保存到内表中DATA lr_grid TYPE REF TO cl_gui_alv_grid.DATA l_tabix LIKE sy-tabix.  "系统参数   行号"此处代码将用户输入读入内表(这一步不可少)CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据IMPORTINGe_grid = lr_grid.CALL METHOD lr_grid->check_changed_data.rs_selfield-refresh = 'X'.   "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层rs_selfield-row_stable = 'X'. "保证行、列位置在自动刷新时不变rs_selfield-col_stable = 'X'.CASE r_ucomm.WHEN 'ALL'.LOOP AT gt_data INTO gw_data.gw_data-sel = 'X'.MODIFY gt_data FROM gw_data.ENDLOOP.WHEN 'SAL'.LOOP AT gt_data INTO gw_data.gw_data-sel = ''.MODIFY gt_data FROM gw_data.ENDLOOP.ENDCASE.ENDFORM.


  • 完整代码
TYPES:BEGIN OF ty_data,sel TYPE char1,ebeln TYPE ekpo-ebeln,ebelp TYPE ekpo-ebelp,END OF ty_data.DATA gt_data TYPE TABLE OF ty_data.
DATA gw_data TYPE ty_data.** Layout  变量定义
DATA gs_layout   TYPE lvc_s_layo.** Fieldcat 变量定义
DATA:gt_fieldcat TYPE lvc_t_fcat,gs_fieldcat LIKE LINE OF gt_fieldcat.** FieldCat的宏
DATA gv_pos TYPE i.DEFINE %%add_fieldcat.gv_pos = gv_pos + 1.gs_fieldcat-col_pos = gv_pos.gs_fieldcat-fieldname = &1.gs_fieldcat-scrtext_m = &2.CASE &1.WHEN 'SEL'.gs_fieldcat-checkbox = 'X'. "当做选择框显示gs_fieldcat-edit     = 'X'. "该字段可以编辑ENDCASE.APPEND gs_fieldcat TO gt_fieldcat.CLEAR gs_fieldcat.
END-OF-DEFINITION.START-OF-SELECTION.SELECT ekpo~ebeln  "采购订单抬头数据- 采购单号ekpo~ebelp  "采购订单明细数据- 采购订单行号INTO CORRESPONDING FIELDS OF TABLE gt_dataFROM ekpoUP TO 20 ROWS.** Fieldcat字段映射处理%%add_fieldcat:'EBELN'    '采购单号',  "( 前面字段值不可变 后面字段描述可变 每一行都是)'EBELP'    '采购订单行号','SEL'      '选择'.** Layout布局处理gs_layout-cwidth_opt = 'X'.     "自动优化列宽 (可以使用**在一行代码面前注释掉 看看ALV会有什么效果)gs_layout-zebra = 'X'.          "斑马纹输出** 调用FunctionALV需要传入的参数:展示数据,FieldCat,Layout,StatusCALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program        = sy-repidi_callback_pf_status_set  = 'FRM_SET_STATUS'i_callback_user_command   = 'FRM_USER_COMMAND'is_layout_lvc             = gs_layoutit_fieldcat_lvc           = gt_fieldcatTABLESt_outtab                 = gt_data[]EXCEPTIONSprogram_error            = 1OTHERS                   = 2.FORM frm_set_status USING p_extab TYPE slis_t_extab.SET PF-STATUS 'STANDARD'.
ENDFORM.FORM frm_user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield."应用方法将修改ALV的数据保存到内表中DATA lr_grid TYPE REF TO cl_gui_alv_grid.DATA l_tabix LIKE sy-tabix.  "系统参数   行号"此处代码将用户输入读入内表(这一步不可少)CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "自动刷新数据IMPORTINGe_grid = lr_grid.CALL METHOD lr_grid->check_changed_data.rs_selfield-refresh = 'X'.   "此处代码阻止'REUSE_ALV_GRID_DISPLAY创建新的屏幕,造成屏幕多层rs_selfield-row_stable = 'X'. "保证行、列位置在自动刷新时不变rs_selfield-col_stable = 'X'.CASE r_ucomm.WHEN 'ALL'.LOOP AT gt_data INTO gw_data.gw_data-sel = 'X'.MODIFY gt_data FROM gw_data.ENDLOOP.WHEN 'SAL'.LOOP AT gt_data INTO gw_data.gw_data-sel = ''.MODIFY gt_data FROM gw_data.ENDLOOP.ENDCASE.ENDFORM.

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电机控制----电机反电动势波形的测量

电机控制----电机反电动势波形的测量 很多人在开发霍尔传感器方波控制时,在如何准确确定出三相绕组的通电顺序方面存在疑惑,在网上找了很多资料都是只给出了相序表,但是真正拿过来引用时却往往对应不了自己的电机,导致项目开发过…

行业证书值得考吗?

在我个人看法,如果时间和经济条件允许,建议考取行业认证证书。这些职能证书犹如一位引领我们进入专业领域的良师,它们或许不能直接提供直接答案,但却为我们敞开了知识的大门,其内含的思维方式是系统性和结构性的。此外…

(202402)多智能体MetaGPT入门2:AI Agent知识体系结构

文章目录 前言1 智能体定义2 热门智能体案例3 智能体的宏观机会4 AI Agent与Sy1&Sy2观看视频 前言 感谢datawhale组织开源的多智能体学习内容,飞书文档地址在https://deepwisdom.feishu.cn/wiki/KhCcweQKmijXi6kDwnicM0qpnEf 本章主要为Agent相关理论知识的学…

【MySQL面试复习】了解过索引吗?(索引的底层原理)/B 树和B+树的区别是什么?

系列文章目录 在MySQL中,如何定位慢查询? 发现了某个SQL语句执行很慢,如何进行分析? 系列文章目录了解过索引吗?(索引的底层原理)B 树和B树的区别是什么? 了解过索引吗?(索引的底层原理) 如果没…

【JVM】线上一次fullGC排查思路

fullGC问题背景 监控告警发现,今天开始我们线上应用频繁出现fullGC,并且每次出现后磁盘都会被占满 查看监控 查看监控发现FULLGC的机器均为同一个机房的集器,并且该机房有线上error报错,数据库监控对应的时间点也有异常&#x…

电脑蓝牙在哪里打开?1分钟轻松打开蓝牙!

“我在操作电脑的时候想将电脑的蓝牙打开来连接音响和键盘,但是不知道电脑蓝牙应该如何打开,有什么比较简单的方法吗?” 随着无线技术的日益发展,蓝牙已成为连接各种设备的重要桥梁。无论是传输文件、音频还是与外部设备进行通信&…

栈和队列笔试题

答案:(1)seqn[tail]data; tail(tail1)%SEQLEN; (2)data seqn[head]; head (head1)%SEQLEN; (3)head tail; (4)(tail1)%SEQLEN head; (5) while(head!tail) head (h…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统(或称作管理后台、管理系统、后台管理平台)是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成,为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

NVIDIA Workbench 安装使用图文教程

NVIDIA Workbench 安装使用教程 文章目录 NVIDIA Workbench 安装使用教程1.安装1.1 下载软件1.2 安装软件 2.使用NVIDIA Workbench2.1 创建一个新项目 3.额外提示3.1 当我们没有停止直接关闭或者直接重启电脑后, 再打开我们已经创立的项目的时候可能会出现创建失败等错误信息.3…

【数据结构与算法】(21)高级数据结构与算法设计之 Dynamic-Programming 动态规划算法 代码示例与详细讲解

目录 4.3 Dynamic-Programming1) Fibonacci降维 2) 最短路径 - Bellman-Ford3) 不同路径-Leetcode 62降维 4) 0-1 背包问题降维 5) 完全背包问题降维 6) 零钱兑换问题-Leetcode322降维零钱兑换 II-Leetcode 518 7) 钢条切割问题降维类似题目 Leetcode-343 整数拆分 8) 最长公共…

153.寻找旋转排序数组中的最小值(二分查找)

一、题目 . - 力扣&#xff08;LeetCode&#xff09; 153. 寻找旋转排序数组中的最小值 二、代码 class Solution { public:int findMin(vector<int>& nums) {int left 0;int right nums.size()-1;int mid (leftright)/2;while(left<right){if(nums[mid]>…

C语言里面的内存函数

1.memcpy函数 &#xff08;1&#xff09;函数的模拟实现&#xff0c;这个函数的作用就是把arr1拷贝到arr2里面&#xff0c;单位是字节&#xff0c;20字节就是5整 数&#xff0c;所以输出的就是1234500000&#xff1b; &#xff08;2&#xff09;之所以强制类型转换成为char*是…