OO:CL_SALV_TABLE练习

1 篇文章 0 订阅
1 篇文章 0 订阅

*&---------------------------------------------------------------------*
*& Report  ZTEST025
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST025.

TABLES:spfli.



***"可编辑
****----------------------------------------------------------------------*
****  Define the Local class inheriting from the CL_SALV_MODEL_LIST
****  to get an access of the model, controller and adapter which inturn
****  provides the Grid Object
****----------------------------------------------------------------------*
***CLASS lcl_salv_model DEFINITION INHERITING FROM cl_salv_model_list.
***
***  PUBLIC SECTION.
***    DATA: o_control TYPE REF TO cl_salv_controller_model,
***          o_adapter TYPE REF TO cl_salv_adapter.
***
***    METHODS:
***      grabe_model
***        IMPORTING
***          io_model TYPE REF TO cl_salv_model,
***
***      grabe_controller,
***
***      grabe_adapter.
***
***
***  PRIVATE SECTION.
***    DATA: lo_model TYPE REF TO cl_salv_model.
***
***ENDCLASS.                    "LCL_SALV_MODEL DEFINITION
****----------------------------------------------------------------------*
**** LCL_SALV_MODEL implementation
****----------------------------------------------------------------------*
***CLASS lcl_salv_model IMPLEMENTATION.
***
***  METHOD grabe_model.
***
****   save the model
***    lo_model = io_model.
***
***  ENDMETHOD.                    "grabe_model
***
***  METHOD grabe_controller.
***
****   save the controller
***    o_control = lo_model->r_controller.
***
***  ENDMETHOD.                    "grabe_controller
***
***  METHOD grabe_adapter.
***
****   save the adapter from controller
***    o_adapter ?= lo_model->r_controller->r_adapter.
***
***  ENDMETHOD.                    "grabe_adapter
***
***ENDCLASS.                    "LCL_SALV_MODEL IMPLEMENTATION


CLASS l_cl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table"新加按钮
                  IMPORTING e_salv_function.
    METHODS: on_after_func FOR EVENT AFTER_SALV_FUNCTION OF CL_SALV_EVENTS_TABLE"标准按钮操作后
                  IMPORTING e_salv_function.
    METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table"双击
                  IMPORTING
                    row "事件触发所在的行号
                    column."事件触发所在的列名
ENDCLASS.

CLASS l_cl_handle_events IMPLEMENTATION.
  METHOD on_user_command.
    PERFORM handle_user_command USING e_salv_function.
  ENDMETHOD.
  METHOD on_after_func.
    PERFORM handle_after_func USING e_salv_function.
  ENDMETHOD.
  METHOD on_double_click.
    PERFORM dbclick_user_command USING row column.
  ENDMETHOD.
ENDCLASS.

DATA: gt_itab like TABLE OF spfli WITH HEADER LINE.
DATA: gt_table type REF TO cl_salv_table,
      gr_function type REF TO CL_SALV_FUNCTIONS_LIST,
      gr_display TYPE REF TO cl_salv_display_settings,
      gr_layout TYPE REF TO cl_salv_layout,
      gs_program TYPE salv_s_layout_key,"该结构包含了布局变式所属程序名
      gr_columns TYPE REF TO CL_SALV_COLUMNS_TABLE,
      gr_column TYPE REF TO CL_SALV_COLUMN,
      gr_selection TYPE REF TO cl_salv_selections,
      lr_events TYPE REF TO CL_SALV_EVENTS_TABLE.
***"可编辑
***DATA: o_salv_model TYPE REF TO lcl_salv_model.

PARAMETERS : l_CONNID LIKE spfli-connid.


START-OF-SELECTION.

if l_CONNID = space.
  SELECT
    * FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE gt_itab.
else.
  SELECT
    * FROM spfli
    INTO CORRESPONDING FIELDS OF TABLE gt_itab
    WHERE connid = l_connid.
endif.


"全屏ALV
  cl_salv_table=>factory( IMPORTING R_SALV_TABLE = gt_table
                          CHANGING t_table = gt_itab[] ).

  gr_function = gt_table->get_functions( )."使用所有按钮function
  gr_function->set_all( 'X' ).

  "
  gt_table->set_screen_status(
                              EXPORTING
                                REPORT = sy-repid
                                PFSTATUS = 'ZTEST025'  "GUI状态,添加了ZTEST按钮
                                SET_FUNCTIONS = gt_table->c_functions_all )."显示所有通用的预设按钮
                                "set_functions = gt_table->c_functions_default )."显示基本默认选择性的预设按钮
                                "set_functions = gt_table->c_functions_none )."所有预设按钮都将不会显示

  gr_display = gt_table->get_display_settings( ).
  gr_display->set_striped_pattern( cl_salv_display_settings=>true ).
  gr_display->set_list_header('Header Test').

  gr_layout = gt_table->get_layout( ).
  gs_program-report = sy-repid.
  gr_layout->set_key( gs_program )."设置布局保存为变式时,这些变式应属性此Key(本程序名)
  gr_layout->set_save_restriction( cl_salv_layout=>restrict_none )."允许保存布局为变式


  "=====获取事件对象
  DATA: lr_event TYPE REF TO cl_salv_events_table.
  lr_event = gt_table->get_event( ).

*  lr_event->RAISE_AFTER_SALV_FUNCTION( '&OAD' ).

  "=====事件注册
  DATA: lr_handle_event TYPE REF TO l_cl_handle_events.
  CREATE OBJECT lr_handle_event.
  SET HANDLER lr_handle_event->on_user_command FOR lr_event."新按钮
  SET HANDLER lr_handle_event->on_double_click FOR lr_event."标准按钮操作后
  SET HANDLER lr_handle_event->on_after_func FOR lr_event."双击

*  gr_function->add_function(
*                    name = 'PRING'
*                    TEXT = '打印'
*                    TOOLTIP = 'haha'
*                    POSITION = if_salv_c_function_position=>right_of_salv_functions )."只适用与可控模式
*  gt_table->set_screen_popup(   "以弹出框显示SALV  可控模式(利用控制器的模式)的SALV是不能以弹出框来显示的
*    start_column = 1
*    end_column = 500
*    start_line = 1
*    end_line = 50 ).
  gr_columns = gt_table->GET_COLUMNS( )."字段标签
  gr_columns->set_optimize( 'X' ).
  gr_column ?= gr_columns->get_column( 'CONNID' ).
  gr_column->set_long_text( '列名222').



  "SALV行列选择模式
  gr_selection = gt_table->get_selections( ).
  gr_selection->set_selection_mode( if_salv_c_selection_mode=>row_column )."可以以行、列的方式进行选择

***"可编辑
****...Get Model Object ...............................................
***    DATA: lo_alv_mod TYPE REF TO cl_salv_model.
***
****   Narrow casting
***    lo_alv_mod ?= gt_table.
***
****   object for the local inherited class from the CL_SALV_MODEL_LIST
***    CREATE OBJECT o_salv_model.
***
****   grabe model to use it later
***    CALL METHOD o_salv_model->grabe_model
***      EXPORTING
***        io_model = lo_alv_mod.

  gt_table->display( ).
*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_SALV_FUNCTION  text
*----------------------------------------------------------------------*
FORM HANDLE_USER_COMMAND  USING    P_E_SALV_FUNCTION.

  case P_E_SALV_FUNCTION.
    when 'ZTEST'.
      message '按钮测试i' type 'I'.
  endcase.

  GT_TABLE->REFRESH( ).
ENDFORM.                    " HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  HANDLE_AFTER_FUNC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_SALV_FUNCTION  text
*----------------------------------------------------------------------*
FORM HANDLE_AFTER_FUNC  USING    P_E_SALV_FUNCTION.
  case P_E_SALV_FUNCTION.
    when '&OAD'.
      message '按钮测试i' type 'I'.
  endcase.
ENDFORM.                    " HANDLE_AFTER_FUNC
*&---------------------------------------------------------------------*
*&      Form  DBCLICK_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_SALV_FUNCTION  text
*----------------------------------------------------------------------*
FORM DBCLICK_USER_COMMAND  USING p_row TYPE i
                                 p_column TYPE lvc_fname.
  DATA: l_row TYPE char10,
        p_text type string.
  WRITE p_row TO l_row LEFT-JUSTIFIED.

  CONCATENATE l_row '行,' '列名:'  p_column p_text INTO p_text SEPARATED BY space.
  MESSAGE p_text type 'I'.




***  "可编辑
***  DATA: lo_grid TYPE REF TO cl_gui_alv_grid,
***        lo_full_adap TYPE REF TO cl_salv_fullscreen_adapter.
***
***  DATA: ls_layout TYPE lvc_s_layo.
***
**** Contorller
****  CALL METHOD lo_report->
***  o_salv_model->grabe_controller( ).
***
**** Adapter
****  CALL METHOD lo_report->
***  o_salv_model->grabe_adapter( ).
***
**** Fullscreen Adapter (Down Casting)
***  lo_full_adap ?= o_salv_model->o_adapter.
***
**** Get the Grid
***  lo_grid = lo_full_adap->get_grid( ).
***
**** Got the Grid .. ?
***  IF lo_grid IS BOUND.
***
****   Editable ALV
***    ls_layout-edit = 'X'.
***
****   Set the front layout of ALV
***    CALL METHOD lo_grid->set_frontend_layout
***      EXPORTING
***        is_layout = ls_layout.
***
****   refresh the table
***    CALL METHOD lo_grid->refresh_table_display.
***
***  ENDIF.

ENDFORM.                    " DBCLICK_USER_COMMAND

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值