在现在项目上alv很多都是用oo做的,其中最常见的就是用oo做成了屏幕分割,今天先略微的概览一遍,等日后修炼加深,再作详细阐述~~
首先我们的目的是实现这种样式的
这就屏幕分割,代码如下
DATA: g_container TYPE REF TO cl_gui_custom_container,
g_splitter TYPE REF TO cl_gui_splitter_container,
g_container_top TYPE REF TO cl_gui_container,
g_container_bom TYPE REF TO cl_gui_container.
DATA: g_grid_top TYPE REF TO cl_gui_alv_grid,
g_grid_bom TYPE REF TO cl_gui_alv_grid.
IF g_container IS INITIAL.
* 创建container对象
CREATE OBJECT g_container
EXPORTING
container_name = 'CONTAINER'.
* 创建splitter对象
CREATE OBJECT g_splitter
EXPORTING
parent = g_container
rows = 2
columns = 1.
CALL METHOD g_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container_top.
CALL METHOD g_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = g_container_bom.
ENDIF.
IF g_grid_top IS INITIAL.
* 创建alv对象
CREATE OBJECT g_grid_top
EXPORTING
i_parent = g_container_top.
* 设置layout
PERFORM frm_alv_layout_top.
* 设置fieldcat内容
REFRESH: gt_fcat_top[].
PERFORM frm_alv_fieldcat CHANGING gt_fcat_top[].
* 设置variant
* PS:初始布局没有效果因为开始没有数据导致
CLEAR: gs_variant_top.
gs_variant_top-report = sy-repid.
gs_variant_top-handle = '0001'.
* 设置按钮
REFRESH: gt_exclude_funcodes.
PERFORM frm_alv_funcodes CHANGING gt_exclude_funcodes.
*显示ALV数据
CALL METHOD g_grid_top->set_table_for_first_display
EXPORTING
is_layout = gs_layout_top
it_toolbar_excluding = gt_exclude_funcodes
i_save = 'A' "space:不保存 U:自定义布局 X:全局布局 A:自定义和全局
is_variant = gs_variant_top "gs_variant
CHANGING
it_fieldcatalog = gt_fcat_top[]
it_