使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. (转)ping命令

    ping命令 原文:https://www.cnblogs.com/peida/archive/2013/03/06/2945407.html Linux系统的ping命令是常用的网络命令,它通常用来 ...

  2. LeetCode 887.鸡蛋掉落(C++)

    每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的 ...

  3. Kudu 常见的几个应用场景

    不多说,直接上干货! Kudu 常见的几个应用场景 实时更新的应用.刚刚到达的数据就马上要被终端用户使用访问到. 时间序列相关的应用,需要同时支持: 根据海量历史数据查询. 必须非常快地返回关于单个实 ...

  4. 如何有效防止DEDE织梦系统被挂木马安全设置(仅供参考)

    尊敬的客户,您好!     感谢广大客户对我司工作的信任和支持!      我司在最近的一个多月内陆续发现多起因 DedeCMS 安全漏洞造成网站被上传恶意脚本的事件,入侵者可利用恶意脚本对外发送大量 ...

  5. TP扩展Xxtea.class.php加密解密函数用法

    http://www.coolcode.org/?action=show&id=128这里可以查到一个相关文章. 附上xiunobbs里的代码,自己加了点注释,欢迎大牛批评指正 //将数值数组 ...

  6. Golang笔记(一)简洁的语言风格

    Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...

  7. Java并发包concurrent类简析

    1.ConcurrentHashMap ConcurrentHashMap是线程安全的HashMap的实现. 1)添加 put(Object key , Object value) Concurren ...

  8. node-sass 安装报错解决办法

    npm install安装node-sass时出现以下问题: Cannot download https://github.com/sass/node-sass/releases/download/v ...

  9. StackTrack for debug

    System.Diagnostics.Debug.WriteLine("Serial port. {0},{1}", this.GetType().FullName, new Sy ...

  10. (C#) 线程之 AutoResetEvent, EventHandle.

    AutoResetEvent 允许线程通过发信号互相通信.通常,此通信涉及线程需要独占访问的资源. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号.如果 AutoRese ...