运用类CL_SALV_TABLE实现alv

以前一直运用container的方式来显示alv,现在介绍一种不太常用的方法来显示alv,希望可以提供一种新的思路。但是一直没有找到怎样运用此方法在Toolbar上增加一个按钮,或者响应某些事件。

 

  REPORT  ZPRO_DAVID_ALV_CL.

*----------------------------------------------------------------------*
      CLASS lcl_report DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_REPORT DEFINITION.
 PUBLIC SECTION.
*----------------------------------------------------------------------*
Final Output Table
*----------------------------------------------------------------------*
    TYPES: BEGIN OF TY_MARA,
            MATNR TYPE MATNR,
            ERSDA TYPE ERSDA,
            MATKL TYPE MATKL,
            MTART TYPE MTART,
            LVORM TYPE LVORM,
           END OF TY_MARA.
   DATA: O_ALV TYPE REF TO CL_SALV_TABLE,              ALV Reference
          T_MARA TYPE STANDARD TABLE OF TY_MARA.
*----------------------------------------------------------------------*
Methods to Fetch Data and Generate Output
*----------------------------------------------------------------------*
    METHODS: GET_DATA,                                  "Data Selection
             GENERATE_OUTPUT.                           "Generating Output  PRIVATE SECTION.
*----------------------------------------------------------------------*
Methods to Set PF-Status, Header and Footer
*----------------------------------------------------------------------*
    METHODS: SET_PF_STATUS
                  CHANGING
                      CO_ALV TYPE REF TO CL_SALV_TABLE, Default Pf Status

                SET_TOP_OF_PAGE
                  CHANGING
                      CO_ALV TYPE REF TO CL_SALV_TABLE, Set Top of page
               SET_END_OF_PAGE
                  CHANGING
                      CO_ALV TYPE REF TO CL_SALV_TABLE. Set End of page
    ENDCLASS.
"lcl_report DEFINITION*----------------------------------------------------------------------*
      CLASS lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_REPORT IMPLEMENTATION.
*----------------------------------------------------------------------*
Data selection
*----------------------------------------------------------------------*
  METHOD GET_DATA.
    SELECT MATNR ERSDA MATKL MTART LVORM INTO TABLE T_MARA
           FROM MARA UP TO 20 ROWS.
  ENDMETHOD.
"get_data*----------------------------------------------------------------------*
Generating Output
*----------------------------------------------------------------------*
  METHOD GENERATE_OUTPUT.
*Exception Class
    DATA: LC_MSG TYPE REF TO CX_SALV_MSG.
*----------------------------------------------------------------------*
We are calling the static Factory method which will give back
the ALV object reference.
*----------------------------------------------------------------------*
    TRY.
        CALL METHOD CL_SALV_TABLE=>FACTORY
          IMPORTING
            R_SALV_TABLE O_ALV
          CHANGING
            T_TABLE      T_MARA.
      CATCH CX_SALV_MSG INTO LC_MSG .
    ENDTRY.
************************************************************************
In this area we will call the methods which will set the
different properties to the ALV
************************************************************************
Calling Set PF status method
    CALL METHOD SET_PF_STATUS
      CHANGING
        CO_ALV O_ALV.       "set_end_of_page* Calling the top of page method
    CALL METHOD SET_TOP_OF_PAGE
      CHANGING
        CO_ALV O_ALV.
Calling the End of page method
    CALL METHOD SET_END_OF_PAGE
      CHANGING
        CO_ALV O_ALV.
************************************************************************
Displaying the ALV
Here we will call the DISPLAY method to get the output on the screen
************************************************************************
    O_ALV->DISPLAY( ).
  ENDMETHOD.                    "generate_output************************************************************************
   In this area we will implement the methods which are defined in
   the class definition
************************************************************************
Setting Default PF-Status
  METHOD SET_PF_STATUS.
    DATA: LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.
Default functions
    LO_FUNCTIONS CO_ALV->GET_FUNCTIONS( ).
    LO_FUNCTIONS->SET_DEFAULT( ABAP_TRUE ).
  ENDMETHOD.                    "set_pf_status
Setting Top_of_page
  METHOD SET_TOP_OF_PAGE.
    DATA: LO_HEADER TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
          LO_H_LABEL TYPE REF TO CL_SALV_FORM_LABEL,
          LO_H_FLOW  TYPE REF TO CL_SALV_FORM_LAYOUT_FLOW.
Header object
    CREATE OBJECT LO_HEADER.
*----------------------------------------------------------------------*
To create Label or Flow we have to specify the target
row and column number where we need to set up the output
text.
*----------------------------------------------------------------------*
Information in Bold
    LO_H_LABEL LO_HEADER->CREATE_LABEL( ROW COLUMN ).
    LO_H_LABEL->SET_TEXT('Header of the ALV Output in Bold').
Information in tabular format
    LO_H_FLOW LO_HEADER->CREATE_FLOW( ROW COLUMN ).
    LO_H_FLOW->CREATE_TEXT( TEXT 'This is text of flow in Header' ).
    LO_H_FLOW LO_HEADER->CREATE_FLOW( ROW COLUMN ).
    LO_H_FLOW->CREATE_TEXT( TEXT 'Date of List Generation' ).
    LO_H_FLOW LO_HEADER->CREATE_FLOW( ROW COLUMN ).
    LO_H_FLOW->CREATE_TEXT( TEXT sy-datum ).
Set the top of list using the header for Online
    CO_ALV->SET_TOP_OF_LIST( LO_HEADER ).
Set the top of list using the header for Print
    CO_ALV->SET_TOP_OF_LIST_PRINT( LO_HEADER ).  ENDMETHOD.                    "set_top_of_page
Setting End_Of_page
  METHOD SET_END_OF_PAGE.
    DATA: LO_FOOTER  TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
          LO_F_LABEL TYPE REF TO CL_SALV_FORM_LABEL,
          LO_F_FLOW  TYPE REF TO CL_SALV_FORM_LAYOUT_FLOW.
Footer Object
    CREATE OBJECT LO_FOOTER.
Information in Bold
    LO_F_LABEL LO_FOOTER->CREATE_LABEL( ROW COLUMN ).
    LO_F_LABEL->SET_TEXT('Footer of the ALV in Bold').
Tabular Information
    LO_F_FLOW LO_FOOTER->CREATE_FLOW( ROW COLUMN ).
    LO_F_FLOW->CREATE_TEXT( TEXT 'This is text of flow in footer' ).
Set the end of list using the header for Online
    CO_ALV->SET_END_OF_LIST( LO_FOOTER ).
Set the End of list using the header for Print
    CO_ALV->SET_END_OF_LIST_PRINT( LO_FOOTER ).
  ENDMETHOD.                    "set_end_of_page
  ENDCLASS.
"lcl_report IMPLEMENTATION*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
  DATA: LO_REPORT TYPE REF TO LCL_REPORT.
  CREATE OBJECT LO_REPORT.
  LO_REPORT->GET_DATA( ).
  LO_REPORT->GENERATE_OUTPUT( ).

 

除此外,还可以和Container结合起来一起用:

 DATA: GR_TABLE   TYPE REF TO CL_SALV_TABLE.
 DATA: GR_REPORT TYPE REF TO LCL_REPORT .
 DATA: CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.


 CREATE OBJECT CONTAINER1
     EXPORTING
       CONTAINER_NAME 'CONTMARA'.


  TRY.
       CL_SALV_TABLE=>FACTORY(
         EXPORTING
           R_CONTAINER    CONTAINER1
           CONTAINER_NAME 'CONTMARA'
         IMPORTING
           R_SALV_TABLE   GR_TABLE
         CHANGING
           T_TABLE        T_MARA ).
     CATCH CX_SALV_MSG.                                 "#EC NO_HANDLER
   ENDTRY.

    create object GR_REPORT.
      GR_REPORT->SET_PF_STATUS( CHANGING CO_ALV  GR_TABLE ).
      GR_REPORT->SET_TOP_OF_PAGE( CHANGING CO_ALV  GR_TABLE ).
     GR_REPORT->SET_COLUMNS( CHANGING CO_ALV  GR_TABLE ).
     GR_TABLE->DISPLAY( ).

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值