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

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的插入代码功能失效了)

span {
font-family: ‘Courier New‘;
font-size: 10pt;
color: #000000;
}
.sc0 {
}
.sc2 {
font-style: italic;
color: #808080;
}
.sc4 {
color: #0000FF;
}
.sc5 {
color: #0000FF;
}
.sc12 {
font-weight: bold;
}
.sc24 {
}

时间: 2024-07-29 03:07:47

OO方式下,ALV TREE和ALV GRID的不同之处的相关文章

ABAP_ALV_Function方式与OO方式(较为简单、普通的ALV)

目录 一.ALV简介 1.简介 2.ALV_GRID介绍 3.其它描述 二.开发ALV的基本流程 三.ALV相关开发细节 1.标准ALV与对象ALV的共同开发细节 2.标准ALV开发相关细节 3.对象ALV开发相关细节 四.注意事项 五.附属信息 1.ALV快捷工具栏功能说明(如下图) 2.类型SLIS_FIELDCAT_ALV常用参数说明 3.类型SLIS_T_SORTINFO_ALV常用参数说明 4.类型SLIS_LAYOUT_ALV常用参数说明 5.类型SLIS_T_EVENT常用参数说明

创建list ALV tree[RS_TREE_LIST_DISPLAY]

ABAP程序中的ALV显示是很常用的一种数据展示手段,除了常规的alv,有时也会用到ALV tree这种有层次结构的展示方式更好的展现数据,下面介绍一个创建list alv tree的方法: 1)用函数RS_TREE_CONSTRUCT构造alv 树的层次结构, alv tree的节点类型(node type)分两种:T和P,区别如下:区别就是个文件夹的图标. 2)调用函数RS_TREE_LIST_DISPLAY显示alv tree 完整代码: 用list alv tree来显示采购订单和采购订

ALV Tree

找相关的alv tree demo:se38 -> bcalv_tree* 1.创建对话屏幕 由于ALV没有专门实现的控件,需要先在对话屏幕100上增加一个用户自定义控件区域(Custom Control),名为CONTAINER1 2.demo源码 *&---------------------------------------------------------------------* *& Report YALV_TREE *&-------------------

Linux下使用tree命令查看目录结构

Linux下的文件虽然是层次型组织结构的,但是我们平时登录到主机上的时候都是使用的各种shell并没有图形界面,看上去很不直观,Linux下有个小命令叫做tree,可以以目录树的形式显示文件结构,类似于Windows下的tree. 如果没有安装的话使用: yum install tree 使用tree查看目录结构: 一些比较常用的选项: -a 显示所有文件,默认情况下是不显示隐藏文件的 -d 只显示目录,默认情况下目录和文件都会显示 -L 指定目录树的最大深度级别 -P 正则匹配打印 更多选项使

java代码模拟DOS下的tree命令

DOS下的tree命令可以把当前路径当做根路径,然后把文件树以树的形式展示出来.这个命令的实现不难,深搜一下文件树就可以了. import java.io.File; import java.util.Scanner; public class Tree { public static int depth = 0; public static void main(String[] args) { Scanner cin = new Scanner(System.in); String path

CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking)

CSharpGL(18)分别处理glDrawArrays()和glDrawElements()两种方式下的拾取(ColorCodedPicking) 我在(Modern OpenGL用Shader拾取VBO内单一图元的思路和实现)记录了基于Color-Coded-Picking的拾取方法. 最近在整理CSharpGL时发现了一个问题:我只解决了用glDrawArrays();渲染时的拾取问题.如果是用glDrawElements();进行渲染,就会得到错误的图元. 本文就彻底解决这个拾取的问题.

Oracle Study之案例--Oracle ASSM管理方式下的BITMAP

Oracle Study之案例--Oracle ASSM管理方式下的Bitmap      在基于此在LMT(Extent Local Management)下Oracle建议我们使用ASSM(Automatic Segment-Space Management),看看 Oracle doc是如何来解释ASSM的: This keyword tells Oracle that you want to use bitmaps to manage the free space with in seg

NSMutableURLRequest,在POST方式下传递参数

1. [代码][C/C++]代码         NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];     NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];        NSLog(@"Load currentCookie:%@", cookie);    [request setValue:cookie forHTTPHead

12 周 长颈鹿类对动物类的继承 private继承方式下

#include <iostream> using namespace std; class Animal { public: Animal() {} void eat() { cout << "eat\n"; } protected: void play() { cout << "play\n"; } private: void drink() { cout << "drink\n"; } };