码迷,mamicode.com
首页 > 其他好文 > 详细

OO方式下,ALV TREE和ALV GRID的不同之处

时间:2016-08-17 15:27:35      阅读:749      评论:0      收藏:0      [点我收藏+]

标签:

ALV TREE和ALV GRID的实现整体上是相似的,但也有一些不同之处,现总结如下

首先定义概念:文中的ALV GRID指的是由OO方式建立的、由类cl_gui_alv_grid实例化后产生的ALV GRID,而ALV TREE指的是由类cl_gui_alv_tree实例化后产生的ALV TREE

 

1,输出内容的构建方式

     ALV GRID的输出数据是通过直接将查询结果内表作为参数传递到ALV GRID对象的 set_table_for_first_display方法而显示的。

   在ALV TREE中,传入set_table_for_first_display方法的内表需要为空,显示的数据则由 add_node方法传入。

(如果是cl_gui_alv_tree_simple,则可通过与ALV GRID相同的方法,在set_table_for_first_display方法传入查询结果内表)

2,自定义按钮的添加

     在ALV GRID中,如要建立工具栏自定义按钮,可以在ALV GRID的toolbar事件触发时使用 cl_alv_event_toolbar_set方法添加自定义按钮。自定义按钮触发的功能码由ALV GRID的usercommand事件接收并处理。

   而ALV TREE中是不存在toolbar事件的,因此,在ALV TREE中创建工具栏自定义按钮,需要使用类cl_gui_toolbar的对象,调用其add_button方法。同样的,自定义按钮触发的功能码也不是由ALV TREE的事件接收,而是由cl_gui_toolbar的on_function_selected事件接收和处理。

3,刷新显示

     对ALV GRID来说,如果修改了表格中的内容,需要刷新后方可显示。 ALV GRID的刷新使用cl_gui_grid的refresh_table_display方法实现。

     对ALV TREE而言,因为最初使用set_table_for_first_display的时候内表是空的(参考上文第一条),必须使用add_node增加节点,之后TREE当中才会有实际内容。因此,它的刷新是必须的,而不是像ALV GRID一样,如果没有变化,在初始化显示之后可以不刷新。ALV TREE中方法refresh_table_display是私有方法,无法直接调用,应通过cl_gui_alv_tree的update_calculations方法和frontend_update方法实现更新。代码片段如下:

 

CREATE OBJECT g_tree EXPORTING …… EXCEPTIONS …… PERFORM build_fieldcatalog. *拖拽对象 PERFORM define_dnd_behaviour. *添加节点 PERFORM add_nodes USING hierarchy_header. *添加工具栏按钮 PERFORM change_toolbar. *注册事件 PERFORM register_events. *更新显示 CALL METHOD g_tree->update_calculations. CALL METHOD g_tree->frontend_update.

 

(待续,CuteEditor的插入代码功能失效了)

OO方式下,ALV TREE和ALV GRID的不同之处

标签:

原文地址:http://www.cnblogs.com/hhelibeb/p/5748296.html

(0)
(3)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!