最近一直在做一个树形展示的东西。
"事件操作
endif.
ENDMETHOD. "HANDLE_DOUBLE_CLICK
ENDCLASS. "CL_TREE_EVENT_RECEIVER IMPLEMENTATION
"事件相关
DATA: tree_event_receiver TYPE REF TO cl_tree_event_receiver.
CREATE OBJECT tree_event_receiver.
"报表头
DATA ls_list_comm TYPE slis_t_listheader.
DATA ls_alist_comm TYPE slis_listheader.
ls_alist_comm-typ = 'H'.
ls_alist_comm-info = '报表'.
APPEND ls_alist_comm TO ls_list_comm.
"填充输出结构
PERFORM zform_fieldcat.
"控制输出层次
PERFORM zform_field_level.
CREATE OBJECT wa_custom_container_tree
EXPORTING
container_name = wa_container_tree.
CREATE OBJECT tree_grid
EXPORTING
i_parent = wa_custom_container_tree.
CALL METHOD tree_grid->set_table_for_first_display
EXPORTING
it_list_commentary = ls_list_comm
" i_structure_name = 'ZTEST_SHOW' "se11建的想要展示的结构
CHANGING
it_sort = gb_sortfld
it_fieldcatalog = gb_fieldcat
it_outtab = gt_show[]. "数据表
CALL METHOD tree_grid->expand_tree
EXPORTING
i_level = 1.
"调用事件
** register events
PERFORM register_events.
** set handler for tree1
SET HANDLER tree_event_receiver->handle_double_click FOR tree_grid.
ENDIF.
ENDFORM.
开始的时候一直用
cl_gui_alv_tree_simple 这个类
首先
建一个屏幕 9001
画一个容器,取名:
TREE
定义数据:
*功能码返回值
DATA : ok_code
TYPE sy
-ucomm
,
save_ok
TYPE sy
-ucomm
.
DATA :
wa_container_tree
TYPE scrfname
VALUE
'TREE'
,
"
wa_custom_container_tree
TYPE
REF
TO cl_gui_custom_container
,
"
tree_grid
TYPE
REF
TO cl_gui_alv_tree_simple
.
DATA :
DATA :
DATA: gb_fieldcat TYPE lvc_t_fcat. "控制输出列
DATA: gb_sortfld TYPE lvc_t_sort. "控制节点
DATA:
"定义事件注册类(使用双击事件)
*----------------------------------------------------------------------*
* INCLUDE BCALV_TREE_EVENT_REC_DRAGDROP *
*----------------------------------------------------------------------*
CLASS cl_tree_event_receiver DEFINITION.
PUBLIC SECTION.
* double click item
METHODS handle_double_click
FOR EVENT node_double_click OF cl_gui_alv_tree_simple
IMPORTING index_outtab
grouplevel.
ENDCLASS. "CL_TREE_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
* CLASS CL_TREE_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS cl_tree_event_receiver IMPLEMENTATION.
METHOD handle_double_click.
CHECK NOT index_outtab IS INITIAL.
"获取当前行
READ TABLE gt_show(数据内表) INTO l_wa_data INDEX index_outtab.
if sy-subrc = 0.
*
*----------------------------------------------------------------------*
CLASS
*
ENDCLASS.
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS
ENDCLASS.
下面是创建树的过程:
FORM zform_create_tree.
IF wa_custom_container_tree IS INITIAL.
**
**
ENDFORM.
控制输出字段
FORM zform_fieldcat
.
CALL
FUNCTION
'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name
=
'ZTEST_BJH_CHECK_SHOW1'
CHANGING
ct_fieldcat
= gb_fieldcat
.
DATA ls_fldcat
TYPE lvc_s_fcat
.
LOOP
AT gb_fieldcat
INTO ls_fldcat
.
ls_fldcat
-
hotspot
=
'X'
.
CASE ls_fldcat
-fieldname
.
WHEN
字段某某
ls_fldcat
-outputlen
=
15
. "设置长度是15
WHEN
OTHERS
.
ls_fldcat
-no_out
=
'X'
. "不需要显示的设置为不输出
ENDCASE
.
IF ls_fldcat
-fieldname
=
'TSLVT'
. "对TSLVT(金额)字段进行求和
* ls_fldcat-do_sum = 'X'.
ENDIF
.
MODIFY gb_fieldcat
FROM ls_fldcat
.
ENDLOOP
.
ENDFORM .
"zform_fieldcat
*
ENDFORM .
"控制展现层次(第一层是地区,第二层是上级科目,第三层是目标科目
FORM zform_field_level
.
DATA
:
l_index
TYPE int4
VALUE
'1'
.
DATA ls_sortfld
TYPE lvc_s_sort
.
ls_sortfld
-spos
= l_index
.
ls_sortfld
-fieldname
=
'QYDM'
.
"区域 "
ls_sortfld
-
up
=
'X'
.
ls_sortfld
-subtot
=
'X'
.
APPEND ls_sortfld
TO gb_sortfld
.
l_index
= l_index
+
1
.
ls_sortfld
-spos
= l_index
.
ls_sortfld
-fieldname
=
'HKONT_PREV'
.
"上级科目编号 "
ls_sortfld
-
up
=
'X'
.
ls_sortfld
-subtot
=
'X'
.
APPEND ls_sortfld
TO gb_sortfld
.
l_index
= l_index
+
1
.
ls_sortfld
-spos
= l_index
.
ls_sortfld
-fieldname
=
'HKONT'
.
"科目编号 "
ls_sortfld
-
up
=
'X'
.
ls_sortfld
-subtot
=
'X'
.
APPEND ls_sortfld
TO gb_sortfld
.
l_index
= l_index
+
1
.
ENDFORM .
"zform_field_level
ENDFORM .
最后类似这样的结果