ALV_TREE(一:cl_gui_alv_tree_si…

最近一直在做一个树形展示的东西。
开始的时候一直用 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: gb_fieldcat TYPE lvc_t_fcat.                                 "控制输出列
DATA: gb_sortfld  TYPE lvc_t_sort.                                 "控制节点


"定义事件注册类(使用双击事件)
*----------------------------------------------------------------------*
*   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.
    "事件操作
    endif.
  ENDMETHOD.                    "HANDLE_DOUBLE_CLICK
ENDCLASS.                    "CL_TREE_EVENT_RECEIVER IMPLEMENTATION



下面是创建树的过程:
FORM zform_create_tree.
  IF wa_custom_container_tree IS INITIAL.
   "事件相关
    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.      


控制输出字段

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


"控制展现层次(第一层是地区,第二层是上级科目,第三层是目标科目
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

最后类似这样的结果
ALV_TREE(一:cl_gui_alv_tree_simple)

转载于:https://www.cnblogs.com/senlinmu110/p/3802205.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值