使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. (转)Rsync命令详解

    Rsync命令详解 原文:http://blog.51cto.com/irow10/1826249 说明: Rsync是linux/Unix文件同步和传送工具.用于替代rcp的一个工具,rsync可以 ...

  2. MATLAB字符串处理

    字符串处理 MATLAB中字符串用单引号   如果字符串中存在单引号,要使用两个单引号. length()元素个数 (1)字符串的执行 格式:eval(s) s表示字符串 abs()和double() ...

  3. [原创]II7/IIS8屏蔽YisouSpider蜘蛛

    来源:http://www.0531s.com/content-46-1927014-1.html YisouSpider蜘蛛抓取网页能够导致CPU暴涨,影响其他蜘蛛和用户的访问,多次实验后,发现II ...

  4. apache POI技术的使用

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 下载开发包: 解压上面的zip文件: 在项目中引入 ...

  5. .NET Core 部署到CentOS–3.supervisord守护进

    1. 安装 sudo yum install python-setuptoolssudo easy_install supervisor 2. 配置 安装成功后,输入supervisord 会显示配置 ...

  6. 排序 & 常用算法

    一.快速排序QuickSort 快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更 ...

  7. SpingCloud微服务架构学习(二)之Actuator监控

    我们那我们之前编写的服务提供者为例,为项目添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId& ...

  8. 从今天开始学习Swift--关于Swift (转)

    WWDC2014推出了新的编程语言,大家都站在了新的起跑线上,希望转发的本文能对园内的朋友一点介绍和帮助,如果大家对swift感兴趣,欢迎踊跃利用google. 原文地址:http://www.coc ...

  9. Android - 看似内存泄漏,实则不是,记一次内存泄漏的案例分析

    APP中常常会存在内存泄漏的问题,一个简单的测试方法是,多次进入和退出同一页面(Activity),使用adb shell中的dumpsys meminfo com.android.settings ...

  10. python模块详解 XML

    XML模块 XML是实现不同语言或程序之间进行数据交换的协议,和json一样. XML格式: <?xml version="1.0" encoding="UTF-8 ...