这应该是一个非常有用的功能,这样我们便可以用它来代替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 = ‘02’.
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. html怎样添加日历控件,向日历控件中添加自定义内容

    向日历控件中添加自定义内容 String[][] holidays; void Page_Load(Object Sender, EventArgs e) { holidays = new Strin ...

  2. 【转载】SAP OO ALV 在自定义屏幕上添加ALV控件 一个屏幕上使用2个ALV

    终于完成了 OO ALV的学习,第一个作品. 一个屏幕上放了2个ALV控件,上面用来显示表头,下面用来显示详细的行项目. 业务背景: 在汽车的售后服务环节,汽车零件在质保期内损坏,维修产生的费用,整车 ...

  3. 在 DataList 和 Repeater 控件中定制按钮46

    简介 在前面十七个DataList 控件和 Repeater 控件教程中,我们创建了一些只读示例和一些编辑和删除示例.要在 DataList 控件中方便地进行编辑和删除,我们为 DataList 控件 ...

  4. vb6中使text控件的光标随着增加的内容向下移动

    vb6中使text控件的光标随着增加的内容向下移动 Dim i As Integer Private Sub Command1_Click() Text1.Text = Text1.Text + &q ...

  5. VB.net实现从ListView控件中异地获取文本内容源代码

    对于一些VB6工程代码来说,需要完成从VB到VB.net的转换,在转换过程中需要注意很多内容,利用VB.net的直接转换功能很少能完全成功,需要我们付出很大的努力. 下面的VB.net代码实现从其他应 ...

  6. 《如何更改其他程序ListView控件中某个Item的内容》

    <如何更改其他程序ListView控件中某个Item的内容> 天津 赵春生 ××× 一:程序说明: 这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已 ...

  7. vb语言中怎样编码窗体中所有字体加粗_VBText控件中使字体加粗和倾斜的代码是什么...

    展开全部 VBText控件中使字体加粗和倾e69da5e6ba9062616964757a686964616f31333365656537斜的代码是: 加粗 Label1.FontBold = Tru ...

  8. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField...

    导言 比起BoundField.CheckBoxField.HyperLinkField以及其他的那些数据字段控件(data field controls)来说,TemplateField提供了一种高 ...

  9. 在ListCtrl控件中插入图标

    在ListCttrl控件(Report风格)的使用上,有时需要向子列中插入图标,例如要制作一个下载软件,我们计划在控件的第一列用图标的形式显示下载状态:排队.下载中.出错等等,第二列计划用图标显示下载 ...

最新文章

  1. pyinstaller 打包tensorflow2.0为单个文件
  2. 配置nginx反向代理jira并实现https
  3. js的parseInt() map(),reduce()方法详解
  4. uni-app 使用vue的语法+小程序的标签和API。
  5. 计算机电路逻辑分析基础知识答案,计算机电路基础试卷及答案.pdf
  6. sklearn常用模块
  7. java foreach 跳过本次循环_【Java】对foreach循环的思考
  8. 【渝粤教育】21秋期末考试个人与团队管理10257k2
  9. oracle 中的trunc()函数及加一个月,一天,一小时,一分钟,一秒钟方法
  10. unique函数_unique函数使用场景(一)
  11. matlab源代码 语义相似度计算,如何计算两个句子之间的相似度(句法和语义)...
  12. contentProvider 内容提供者
  13. 为什么新一代的Rust、Go等编程语言都如此讨厌if-else、Switch结构
  14. AD RMS高可用(四)添加rms成员服务器
  15. [渝粤教育] 中国地质大学 中国文化地理 复习题
  16. 373.查找和最小的K对数字
  17. 火狐浏览器Json插件(JSONView)
  18. 【战“疫”案例展】上海临港方舱医院——7天打造“数字方舱”,搭建智能化管理系统平台...
  19. PPT投影仪演示设置
  20. 开源项目—swift开发记事本APP

热门文章

  1. 学习记录:CONCAT()
  2. PHP ElasticSearch的使用
  3. 本地安装gem install --local redis-stat-0.4.13.gem
  4. asp.net core 系列 18 web服务器实现
  5. 行转列:SQL SERVER PIVOT与用法解释
  6. MongoDB(课时18 修改器)
  7. 人工智能:看似很美,却暗藏泡沫
  8. linux系统监控:记录用户操作轨迹,谁动过服务器
  9. 【js】JSON.stringify 语法实例讲解
  10. ELK+redis搭建nginx日志分析平台