使ALV控件中的内容可编辑

这应该是一个非常有用的功能,这样我们便可以用它来代替table control来编出一些有这现成功能的界面来。实际上,让alv中的内容可以被编辑与alv的事件无关。但是经常需要验证输入的数据,所以还是需要从事件开始谈起。
想使一列可以被编辑只需在field catalog中把edit字段设为’X’即可。如果设置了可编辑的字段那么alv便会添加相应的编辑按钮。如果不需要这些按钮那么可以按上面说过的方法排除他们。
如果想使某个单元格可编辑,那么就要用到上面所提到的把某个单元格作为按钮的那个内表。它的类型是LVC_T_STYL。向这个内表中添加记录,把需要字段名传给FIELDNAME,把cl_gui_alv_grid=>mc_style_enabled传给style以使这个字段可以被编辑,或者把cl_gui_alv_grid=>mc_style_disabled传给style以使这个字段不能被编辑。如果已经把整列设为可编辑,而只想让这个列中的某些单元格不可编辑,可以使用这种方法。正如前面所述,需要告诉layout那个字段是style字段。
Gs_layout-stylefname = ‘CELLSTYLES’.
下面是关于这些功能的一段代码:我们已经把’SEATSMAX’整列设为可编辑状态,但当CARRID为’xy’时除外。如果connid是’02’时我们就使‘PLANETYPE’可编辑。
我们把style table添加到了我们的显示表中,并在layout structure中说明style field。我们在field catalog中把相应的EDIT设为‘X’。
 FORM adjust_edittables USING pt_list LIKE gt_list[].

   DATA ls_listrow LIKE LINE OF pt_list.

   DATA ls_stylerow TYPE lvc_s_styl.

   DATA lt_styletab TYPE lvc_t_styl.

   LOOP AT pt_list INTO ls_listrow.

     IF ls_listrow-carrid = ‘XY’.

       Ls_stylerow-fieldname = ‘SEATSMAX’.

       Ls_stylerow-style = cl_alv_grid=>mc_style_disabled.

       APPEND ls_stylerow TO lt_styletab.

    ENDIF.

    IF ls_listrow-connid = ‘’.

      Ls_stylerow-fieldname = ‘PLANETYPE’

      Ls_stylerow-.style = cl_alv_grid=>mc_style_enabled.

      APPEND ls_Pstylerow TO lt_styletab.

    ENDIF.

   INSERT LINES OF lt_styletab INTO ls_listrow-cellstyles.

   MODIFY pt_list FROM ls_listrow.

  ENDLOOP.

 ENDFORM.

通常情况下,单元格的设置会覆盖整列的设置。可以在程序里动态切换各种模式。只需要在内表中插入想要的设置并刷新显示即可。对于整列来说可以设置field catalog的EDIT属性,然后通过方法set_frontent_fieldcatalog来重新设置field catalog。

最后,需要使用方法set_ready_for_input传入参数i_ready_for_input = 1即可。
用这个方法可以在编辑和不可编辑模式之间切换。显然如果把参数i_ready_for_input=0即进入不可编辑状态。
控制数据的变化
我们可以使alv处于可编辑状态,我们还需要控制数据的输入。Alv grid有连个事件,即data_changed和data_changed_finished。第一个事件在可编辑字段的数值发生变化时触发,可以用来检查数据的输入,第二个事件是当修改已经完成后触发。
可以通过方法register_edit_event来设置alv如何察觉数据的改变。有两个选项
I 按回车键之后:i_event_id = cl_gui_alv_grid=>mc_event_enter
II 当鼠标有当前编辑的字段移到另一个字段:i_event_id = cl_gui_alv_grid=>mc_event_modifies
要想控制数据的输入,必须通过这个方法设置一种方式,否则事件就不会被触发。
为了控制字段的修改通过事件data_changed把类CL_ALV_CHANGED_DATA_PROTOCOL的实例传给alv grid。通过这个类的方法,就可以得到单元格的值并修改它或者产生错误信息。
下面是这个类的一些方法:
 
Get_cell_value
Gets the cell value.You pass the interface the position of the cell
Modify_cell
Modifies the cell value addressed via parameters
Add_protocol_entry
Add a log entry. You make use of standard message interface with message type, message id etc.
Protocol_is_visible
Make the error table visible or not
Refresh_protocol
Refreshing log entries
 
 
 
 
 
 
 
 
 
 
 
 
 
 
通过这个事列的指针变量,可以得到一些修改的信息。下表是对这些信息的一些列举:
 
 
 
 
MT_MOD_CELLS
Contains address of modified cells with rowed and field name
MT_MOD_ROWS
Contain modified rows Its type is genric
MT_GOOD_CELLS
Contain cells have proper values
MT_DELETED_ROWS
Contain rows deleted from the list
MT_INSERTED_ROWS
Contain rows deleted from the list
 
 
 
 
 
 
 
 
 
通过上面的方法和属性就可以检查数据的输入给出正确的消息或修改它们的值。

实例:关于ALV控件可编辑的整理的更多相关文章

  1. word 内容控件属性编辑

    场景: 别人发给自己一份word模板,基于统一性,里面包含了很多“内容控件”,一般情况下,只需要根据内容控件进行编辑即可,但如果想对内容控件本身做编辑操作,例如删除等. 操作: 单击 文件>选项 ...

  2. WinForm控件使用文章收藏整理完成

    对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Lab ...

  3. VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)

    鸡啄米上一节讲了静态文本框,本节要讲的编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框 ...

  4. VS2010-MFC(常用控件:编辑框Edit Control)

    转自:http://www.jizhuomi.com/software/181.html 编辑框(Edit Control)是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子 ...

  5. MFC编程入门之二十一(常用控件:编辑框Edit Control)

    上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框的使用 ...

  6. 实例:用户界面控件Kendo UI vs DevExpress对比评测一

    在一次使用ASP.NET MVC进行开发的Web项目中,我们需要用户界面控件来帮助实现界面的大部分功能.由于项目比较复杂,我们最终确定对 Kendo UI 和 DevExpress 这两款国际知名的用 ...

  7. 点击CheckBox让Gridview控件在编辑与正常状态之间切换

    昨晚快休息时,还有一位网友咨询Insus.NET,他想在开发时,实现一个小功能,就是想让用户在点击Gridview控件第一列的CheckBox之后,GridView进入编辑状态,取消选中的CheckB ...

  8. ASP.NET 控件不可编辑

    前台页面的解析后的html代码为disabled="disabled",而在后台我们需要设置控件的Enabled=false:即可.

  9. C#控件及常用设计整理

    1.窗体  1.常用属性  (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体.  (2) WindowState属性:  用来获取或设置窗体的窗口状态. 取值有三 ...

随机推荐

  1. vue脚手架 && 实例

    什么是vue脚手架? 即可以快速构建vue项目的工具,通过它,我们可以将vue项目所需要的文件等安装完成. 为什么要是用vue脚手架,优点何在? 因为创建一个vue项目需要很多的依赖,文件的设置等,而 ...

  2. 动态资源不缓存 filter

    package com.itheima.web.filter; import java.io.IOException; import javax.servlet.Filter; import java ...

  3. pat1046. Shortest Distance (20)

    1046. Shortest Distance (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The ...

  4. 亲测SQLServer的最大连接数

    很多做架构设计.程序开发.运维.技术管理的朋友可能或多或少有这样的困惑: SQLServer到底支持多少连接数的并发? SQLServer是否可以满足现有的应用吗? 现有的技术架构支持多少连接数的并发 ...

  5. 基础7 面向对象进阶与socket编程

    1.静态方法(用得少)(解除某个函数跟类的关联,加了静态方法后,类便不能将类的参数传给静态方法函数了) class Dog(object): def __init__(self,name): @sta ...

  6. 【Python学习一】使用Python+selenium实现第一个自动化测试脚本

    1.Python的下载 python官方下载地址:https://www.python.org/downloads/ 这边安装的3.6.5为最新版本以适应未来的需求 进入页面就有两个版本的下载选择,2 ...

  7. 在CentOS上配置redis服务

    #!/bin/sh # # redis Startup script for Redis Server # # chkconfig: - 80 12 # description: Redis is a ...

  8. 画布canvas签名

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. C++基础--sizeof和strlen的区别

    首先,来运行一段程序: #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...

  10. 使用ionic cordova build android --release --prod命令打包报错解决方法

    使用ionic cordova build android --release --prod命令打包报有如下错误及解决方法 只要把以下内容添加到build-extras.gradle或(build** ...