SAP GRID-ALV复选框+GRID事件

实现功能: 复选框\设置复选框是否可编辑\实现changed_finished事件.

一、ALV增加复选框:

1.1、在输出内表里增加一个SEL的字段:

sel          TYPE c,

1.2、在build_fieldcat FORM里设置checkbox属性和edit属性,并输出SEL字段:

    IF ls_fieldcat-fieldname = 'SEL'.ls_fieldcat-checkbox = 'X'.ENDIF.

1.3、刷新内表数据,捕获到用户选择的数据

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = g_grid.CALL METHOD g_grid->check_changed_data.

二、控制ALV里的复选框是否可选择:

2.1、在输出内表里增加一个Style字段,控制复选框的样式:

stytle       TYPE lvc_t_styl,     "2.1

2.2、设置ALV的Layout:

gs_layout-stylefname = 'STYTLE'.      "2.2

2.3、在输出内表里设置STYTLE样式,控制复选框是否可行:

  LOOP AT gt_data ASSIGNING .AT NEW ebeln.l_new_flag = 'X'.ENDAT.IF l_new_flag = 'X'.CLEAR -stytle.ls_stytle-fieldname = 'SEL'.ls_stytle-style = cl_gui_alv_grid=>mc_style_enabled.INSERT ls_stytle INTO TABLE -stytle.CLEAR: l_new_flag.ELSE.CLEAR -stytle.ls_stytle-fieldname = 'SEL'.ls_stytle-style = cl_gui_alv_grid=>mc_style_disabled.INSERT ls_stytle INTO TABLE -stytle.ENDIF.ENDLOOP.

三、增加CHANGED_FINISHED 事件:

3.1、定义事件接收者:

*&**ALV 事件
DATA: g_grid    TYPE REF TO cl_gui_alv_grid.
DATA: gt_event TYPE slis_t_event WITH HEADER LINE.
CLASS: cl_event_receiver DEFINITION DEFERRED.
DATA:  event_receiver TYPE REF TO cl_event_receiver .

3.2、定义与实现事件:

*&**========================================================================
*&* 事件
*&**========================================================================
CLASS cl_event_receiver DEFINITION.PUBLIC SECTION.METHODS:handle_top_of_page FOR EVENT top_of_pageOF cl_gui_alv_grid IMPORTING e_dyndoc_id,
*Hotspot click controlhandle_hotspot_clickFOR EVENT hotspot_click OF cl_gui_alv_gridIMPORTING e_row_id e_column_id es_row_no,handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_row e_column es_row_no sender,handle_toolbarFOR EVENT toolbar OF cl_gui_alv_gridIMPORTING e_object e_interactive sender,handle_before_user_commandFOR EVENT before_user_command OF cl_gui_alv_gridIMPORTING e_ucomm sender,handle_user_commandFOR EVENT user_command OF cl_gui_alv_gridIMPORTING e_ucomm sender,handle_data_changedFOR EVENT data_changed OF cl_gui_alv_gridIMPORTING er_data_changed sender,handle_data_changed_finishedFOR EVENT data_changed_finished OF cl_gui_alv_gridIMPORTING e_modified et_good_cells sender.PRIVATE SECTION.
* This flag is set if any error occured in one of the
* following methods:DATA: error_in_data TYPE c.
ENDCLASS. "CL_event_receiver DEFINITION**------实现事件---------------------------------------------------CLASS cl_event_receiver IMPLEMENTATION.METHOD handle_top_of_page.
*    perform frm_top_of_page  using e_dyndoc_id.ENDMETHOD.                    "handle_top_of_pageMETHOD handle_hotspot_click .
*    perform frm_handle_hotspot_click using e_row_id e_column_id es_row_no.ENDMETHOD .                    "handle_hotspot_clickMETHOD handle_double_click.
*    PERFORM frm_handle_double_click USING e_row e_column es_row_no sender.ENDMETHOD.                    "HANDLE_DOUBLE_CLICKMETHOD handle_toolbar.ENDMETHOD.                    "handle_toolbarMETHOD handle_before_user_command.ENDMETHOD.                    "handle_before_user_commandMETHOD handle_user_command.ENDMETHOD.                           "handle_user_commandMETHOD handle_data_changed.ENDMETHOD.                    "handle_data_changedMETHOD   handle_data_changed_finished.DATA: ls_data LIKE ty_data.DATA: ls_stable TYPE lvc_s_stbl.DATA: ls_modi TYPE lvc_s_modi.BREAK-POINT.error_in_data = space.READ TABLE et_good_cells INTO ls_modi INDEX 1.IF ls_modi-fieldname = 'SEL'.READ TABLE gt_data INTO ls_data INDEX ls_modi-row_id.MODIFY gt_data FROM ls_data TRANSPORTING sel WHERE ebeln = ls_data-ebeln."刷新内表ls_stable-row = 'X'.ls_stable-col = 'X'.CALL METHOD g_grid->refresh_table_displayEXPORTINGis_stable = ls_stable.ENDIF.ENDMETHOD.                    "HANDLE_DATA_CHANGED_FINISHED
ENDCLASS. "CL_event_receiver IMPLEMENTATION

3.3、追加事件并设置事件参数:

  "3.3 

 gt_event-name = 'CALLER_EXIT'.          "CALLER_EXIT 不能改变gt_event-form = 'FRM_CHANGED_FINISHED'.  " FORMAPPEND gt_event .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repidi_callback_pf_status_set = 'ALV_GUI_STATUS'i_callback_user_command  = 'ALV_USER_COMMAND'it_events                = gt_event[]is_layout_lvc            = gs_layoutit_fieldcat_lvc          = gt_fieldcatTABLESt_outtab                 = gt_dataEXCEPTIONSprogram_error            = 1OTHERS                   = 2.

3.4、注册事件:

FORM FRM_CHANGED_FINISHED USING e_grid TYPE slis_data_caller_exit.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = g_grid.* 设置enter事件CALL METHOD g_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_enter.CALL METHOD g_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_modified.CREATE OBJECT event_receiver.SET HANDLER   event_receiver->handle_data_changed_finished FOR g_grid.
ENDFORM.                    "FRM_CHANGED_FINISHED程序完事代码(新建一个GUI_1000可直接运行):
*&---------------------------------------------------------------------*
*& Report ZFIRP004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfirp005_test.TABLES: ekpo.TYPE-POOLS:slis.
*&*ALV
DATA:gt_fieldcat TYPE lvc_t_fcat,gs_layout   TYPE lvc_s_layo.*&**ALV 事件
DATA: g_grid    TYPE REF TO cl_gui_alv_grid.
DATA: gt_event TYPE slis_t_event WITH HEADER LINE.
CLASS: cl_event_receiver DEFINITION DEFERRED.
DATA:  event_receiver TYPE REF TO cl_event_receiver .DATA: BEGIN OF ty_data,ebeln        LIKE ekpo-ebeln,ebelp        LIKE ekpo-ebelp,loekz        LIKE ekpo-loekz,matnr        LIKE ekpo-matnr,bukrs        LIKE ekpo-bukrs,werks        LIKE ekpo-werks,lgort        LIKE ekpo-lgort,menge        LIKE ekpo-menge,meins        LIKE ekpo-meins,netwr        LIKE ekpo-netwr,sel          TYPE c,              "1.1stytle       TYPE lvc_t_styl,     "2.1message(100) TYPE c,END OF ty_data,gt_data LIKE TABLE OF ty_data.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_bukrs FOR ekpo-bukrs DEFAULT '8000',s_matnr FOR ekpo-matnr,s_werks FOR ekpo-werks.
PARAMETERS: p_mtart LIKE mara-mtart DEFAULT 'Z400'.
SELECTION-SCREEN END OF BLOCK b1.AT SELECTION-SCREEN OUTPUT.AT SELECTION-SCREEN.INITIALIZATION.START-OF-SELECTION.PERFORM frm_get_data.END-OF-SELECTION.PERFORM alv_display.*&**========================================================================
*&* 事件
*&**========================================================================
CLASS cl_event_receiver DEFINITION.PUBLIC SECTION.METHODS:handle_top_of_page FOR EVENT top_of_pageOF cl_gui_alv_grid IMPORTING e_dyndoc_id,
*Hotspot click controlhandle_hotspot_clickFOR EVENT hotspot_click OF cl_gui_alv_gridIMPORTING e_row_id e_column_id es_row_no,handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_row e_column es_row_no sender,handle_toolbarFOR EVENT toolbar OF cl_gui_alv_gridIMPORTING e_object e_interactive sender,handle_before_user_commandFOR EVENT before_user_command OF cl_gui_alv_gridIMPORTING e_ucomm sender,handle_user_commandFOR EVENT user_command OF cl_gui_alv_gridIMPORTING e_ucomm sender,handle_data_changedFOR EVENT data_changed OF cl_gui_alv_gridIMPORTING er_data_changed sender,handle_data_changed_finishedFOR EVENT data_changed_finished OF cl_gui_alv_gridIMPORTING e_modified et_good_cells sender.PRIVATE SECTION.* This flag is set if any error occured in one of the
* following methods:DATA: error_in_data TYPE c.ENDCLASS. "CL_event_receiver DEFINITION**------实现事件---------------------------------------------------
CLASS cl_event_receiver IMPLEMENTATION.METHOD handle_top_of_page.
*    perform frm_top_of_page  using e_dyndoc_id.ENDMETHOD.                    "handle_top_of_pageMETHOD handle_hotspot_click .
*    perform frm_handle_hotspot_click using e_row_id e_column_id es_row_no.ENDMETHOD .                    "handle_hotspot_clickMETHOD handle_double_click.
*    PERFORM frm_handle_double_click USING e_row e_column es_row_no sender.ENDMETHOD.                    "HANDLE_DOUBLE_CLICKMETHOD handle_toolbar.ENDMETHOD.                    "handle_toolbarMETHOD handle_before_user_command.ENDMETHOD.                    "handle_before_user_commandMETHOD handle_user_command.ENDMETHOD.                           "handle_user_commandMETHOD handle_data_changed.ENDMETHOD.                    "handle_data_changedMETHOD   handle_data_changed_finished.DATA: ls_data LIKE ty_data.DATA: ls_stable TYPE lvc_s_stbl.DATA: ls_modi TYPE lvc_s_modi.BREAK-POINT.error_in_data = space.READ TABLE et_good_cells INTO ls_modi INDEX 1.IF ls_modi-fieldname = 'SEL'.READ TABLE gt_data INTO ls_data INDEX ls_modi-row_id.MODIFY gt_data FROM ls_data TRANSPORTING sel WHERE ebeln = ls_data-ebeln."刷新内表ls_stable-row = 'X'.ls_stable-col = 'X'.CALL METHOD g_grid->refresh_table_displayEXPORTINGis_stable = ls_stable.ENDIF.ENDMETHOD.                    "HANDLE_DATA_CHANGED_FINISHEDENDCLASS. "CL_event_receiver IMPLEMENTATION*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*      获取 主数据
*----------------------------------------------------------------------*
FORM frm_get_data .FIELD-SYMBOLS <fs> LIKE ty_data.DATA: l_new_flag TYPE c,ls_stytle  TYPE lvc_s_styl.SELECT *INTO CORRESPONDING FIELDS OF TABLE gt_dataFROM ekpoWHERE bukrs IN s_bukrsAND matnr IN s_matnrAND werks IN s_werks.SORT gt_data BY ebeln ebelp ."2.3LOOP AT gt_data ASSIGNING <fs>.AT NEW ebeln.l_new_flag = 'X'.ENDAT.IF l_new_flag = 'X'.CLEAR <fs>-stytle.ls_stytle-fieldname = 'SEL'.ls_stytle-style = cl_gui_alv_grid=>mc_style_enabled.INSERT ls_stytle INTO TABLE <fs>-stytle.CLEAR: l_new_flag.ELSE.CLEAR <fs>-stytle.ls_stytle-fieldname = 'SEL'.ls_stytle-style = cl_gui_alv_grid=>mc_style_disabled.INSERT ls_stytle INTO TABLE <fs>-stytle.ENDIF.ENDLOOP.ENDFORM.FORM alv_display .PERFORM alv_build_fieldcat .gs_layout-cwidth_opt = abap_true.     "优化列宽设置gs_layout-no_toolbar = 'X'.gs_layout-stylefname = 'STYTLE'.      "2.2"3.3gt_event-name = 'CALLER_EXIT'.          "CALLER_EXIT 不能改变gt_event-form = 'FRM_CHANGED_FINISHED'.APPEND gt_event .CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program       = sy-repidi_callback_pf_status_set = 'ALV_GUI_STATUS'i_callback_user_command  = 'ALV_USER_COMMAND'it_events                = gt_event[]is_layout_lvc            = gs_layoutit_fieldcat_lvc          = gt_fieldcatTABLESt_outtab                 = gt_dataEXCEPTIONSprogram_error            = 1OTHERS                   = 2.IF sy-subrc <> 0.MESSAGE e001(00) WITH '系统错误' space space space.ENDIF.ENDFORM.FORM alv_gui_status USING fu_extab TYPE slis_t_extab.SET PF-STATUS 'GUI_1000'.
ENDFORM.FORM alv_user_command USING fu_ucomm LIKE sy-ucommfu_selfield TYPE slis_selfield.DATA:ls_stable LIKE lvc_s_stbl.* 1.3 刷新內表CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = g_grid.CALL METHOD g_grid->check_changed_data.CASE fu_ucomm.WHEN 'POST'.CLEAR:fu_ucomm.WHEN 'CHECK'.CLEAR:fu_ucomm.ENDCASE.*&**重新设置ALV显示布局CALL METHOD g_grid->set_frontend_layoutEXPORTINGis_layout = gs_layout.
*&**刷新显示数据 row col 为X刷新后保持位置不变ls_stable-row = 'X'.ls_stable-col = 'X'.CALL METHOD g_grid->refresh_table_displayEXPORTINGis_stable = ls_stable.fu_selfield-refresh    = 'X'.fu_selfield-row_stable = 'X'.fu_selfield-col_stable = 'X'.
ENDFORM.FORM alv_build_fieldcat .DATA: ls_fieldcat TYPE lvc_s_fcat.DEFINE set_fieldcatalog.CLEAR ls_fieldcat.ls_fieldcat-col_pos      = &1.      "列位置ls_fieldcat-edit         = &2.      "可编辑ls_fieldcat-just         = &3.      "对齐方式ls_fieldcat-ref_table    = &4.      "引用表ls_fieldcat-ref_field    = &5.      "引用字段ls_fieldcat-fieldname    = &6.      "要显示的字段ls_fieldcat-coltext      = &7.      "字段名IF ls_fieldcat-fieldname = 'SEL'.   "1.2ls_fieldcat-checkbox = 'X'.ENDIF.APPEND ls_fieldcat TO gt_fieldcat.END-OF-DEFINITION.set_fieldcatalog:1 'X ' 'L'  ' ' ' ' 'SEL'  '选择',1 ' ' 'L'  ' ' ' ' 'EBELN'  '采购订单',1 ' ' 'L'  ' ' ' ' 'EBELP'  '采购订单项目',1 ' ' 'L'  ' ' ' ' 'BUKRS'  '公司代码',1 ' ' 'L'  ' ' ' ' 'WERKS'  '工厂',1 ' ' 'L'  ' ' ' ' 'LGORT'  '库位',1 ' ' 'L'  ' ' ' ' 'MATNR'  '物料编码',1 ' ' 'L'  ' ' ' ' 'LOEKZ'  '删除标识',1 ' ' 'L'  ' ' ' ' 'MENGE'  '数量',1 ' ' 'L'  ' ' ' ' 'MEINS'  '单位',1 ' ' 'L'  ' ' ' ' 'NETWR'  '净值'.ENDFORM.FORM FRM_CHANGED_FINISHED USING e_grid TYPE slis_data_caller_exit.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = g_grid.* 设置enter事件CALL METHOD g_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_enter.CALL METHOD g_grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_modified.CREATE OBJECT event_receiver.SET HANDLER   event_receiver->handle_data_changed_finished FOR g_grid.
ENDFORM.                    "FRM_CHANGED_FINISHED

 

 

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

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

相关文章

Centos系列:Centos7下部署nginx(三种方式安装部署,图文结合超详细,适合初学者)

Centos7下部署nginx&#xff08;三种方式安装部署&#xff0c;图文结合超详细&#xff0c;适合初学者&#xff09; Centos7下部署nginx一. ngxin是什么二. nginx的作用正向代理和反向代理的区别 三. 安装部署安装环境1. yum安装配置nginx源启动nginx浏览器访问&#xff0c; IP:…

计算机组成原理学习-总线总结

复习本章时&#xff0c;思考以下问题&#xff1a; 1)引入总线结构有什么好处&#xff1f;2)引入总线结构会导致什么问题&#xff1f;如何解决&#xff1f;

泊车功能专题介绍 ———— 记忆泊车评价规程(征求意见稿)

文章目录 评价方法指标体系指标权重分配算分方法指标得分计算方法露天停车场一键召唤得分情况说明泊出能力得分情况说明水平划线车位——两侧存在静止车辆水平划线车位——两侧存在静止车辆且车位附近有静止直立儿童垂直划线车位——两侧存在静止车辆垂直划线车位——两侧存在静…

sql语句排除相同元素

数据库表如图所示&#xff0c;重复的&#xff0c;我只要登录用户名下的车位号并且不重复 使用下面这种语句就会呈现下面那张图 public List<CarplaceNumber> getAllCarplaceNumberList(String substring1) throws SQLException {QueryRunner r new QueryRunner(DataSou…

计算机组成学习-中央处理器总结

复习本章时&#xff0c;思考以下问题&#xff1a; 1)CPU分为哪几部分&#xff1f;分别实现什么功能&#xff1f; 2)指令和数据均存放在内存中&#xff0c;计算机如何从时间和空间上区分它们是指令还是数据&#xff1f; 3)什么是指令周期、机器周期和时钟周期&#xff1f;它们之…

【PyTorch】softmax回归

文章目录 1. 模型与代码实现1.1. 模型1.2. 代码实现 2. Q&A 1. 模型与代码实现 1.1. 模型 背景 在分类问题中&#xff0c;模型的输出层是全连接层&#xff0c;每个类别对应一个输出。我们希望模型的输出 y ^ j \hat{y}_j y^​j​可以视为属于类 j j j的概率&#xff0c;然…

Mysql的索引详解

1.索引的分类 1.按照功能来分&#xff0c;可以分为主键索引、唯一索引、普通索引、全文索引 2.按照索引字段个数来分&#xff0c;可以分为单列索引、联合索引 3.按照物理实现方式来分&#xff0c;可以聚簇索引、非聚簇索引 2.适合添加索引的场景 1.具有唯一性约束的字段。 2…

Find My扩展坞|苹果Find My技术与扩展坞结合,智能防丢,全球定位

扩展坞又称端口复制器&#xff0c;是专为笔记本电脑设计的一种外置设备。通过复制甚至扩展笔记型计算机的端口&#xff0c;可使笔记本电脑与多个配件或外置设备&#xff08;如电源适配器、网线、鼠标、外置键盘、打印机及外置显示器&#xff09;方便的一站式连接。随着全球经济…

公众号50个数量怎么操作?

一般可以申请多少个公众号&#xff1f;公众号申请限额在过去几年内的经历了很多变化。对公众号申请限额进行调整是出于多种原因&#xff0c;确保公众号内容的质量和合规性。企业公众号的申请数量从50个到5个最后到2个&#xff0c;对于新媒体公司来说&#xff0c;这导致做不了公…

SDX12 QCA6174 WIFI调试

SDX12 QCA6174 WIFI调试 1. 简介1.1 目的1.2 Hostapd1.3 Wpa_supplicant 2. 系统架构3. Wi-Fi编译调试3.1 Wifi编译相关介绍 4. Wi-Fi配置4.1 AP工作模式配置4.2 STA工作模式配置配置 5. 附录A参考 1. 简介 1.1 目的 本文介绍高通sdx12平台PCIe接口接入Wi-Fi模组时&#xff0…

【EI会议征稿】第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024)

第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024) 2024 9th International Symposium on Advances in Electrical, Electronics and Computer Engineering 第九届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2024&#xff09;将于2024年3月1-5日在南京…

外汇天眼:想像巴菲特那样纵横市场?那你和他之间就差个它...

在金融市场上&#xff0c;有些人以巴菲特为榜样&#xff0c;希望像他一样纵横市场&#xff0c;成为投资大师。然而大多数人只是看到了巴菲特表面的成功&#xff0c;却忽视了他在投资过程中所付出的努力和智慧。实际上&#xff0c;如果你想成为像巴菲特那样的投资者&#xff0c;…