天天看点

ALV_TREE 一:cl_gui_alv_tree_simple

先看效果图:

ALV_TREE 一:cl_gui_alv_tree_simple

用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'        

      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