用OO方法开发ALV(已实现DropdownList,纵向alv head,double_click、top_of_page事件,不断完善中)...

*其他操作:

*1.建立屏幕100,在100上画一个custom control命名为cont1
*2.定义一个status命名为stu_0100
REPORT zctest13.
CLASS cl_events DEFINITION DEFERRED.
TABLES: kna1.
DATA: save_ok TYPE sy-ucomm,
      ok_code TYPE sy-ucomm,
      w_fname TYPE scrfname VALUE 'CONT1',
      w_grid  TYPE REF TO cl_gui_alv_grid,
      w_cont  TYPE REF TO cl_gui_custom_container,
      it_fieldcat TYPE lvc_t_fcat,
      iw_layout TYPE lvc_s_layo,
      w_receiver TYPE REF TO cl_events,
      it_exclude TYPE ui_functions.
DATA: w_doc TYPE REF TO cl_dd_document,
      w_splitter TYPE REF TO cl_gui_splitter_container,
      w_viewer TYPE REF TO cl_gui_html_viewer,
      w_head TYPE REF TO cl_gui_container,
      w_body TYPE REF TO cl_gui_container.
DATA: it_kna1 TYPE TABLE OF kna1,
      iw_kna1 TYPE kna1.
*----------------------------------------------------------------------*
*       CLASS cl_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_events DEFINITION.
  PUBLIC SECTION.
    METHODS handle_double_click FOR EVENT double_click
      OF cl_gui_alv_grid IMPORTING e_row e_column.
    METHODS handle_top_of_page FOR EVENT top_of_page
      OF cl_gui_alv_grid IMPORTING e_dyndoc_id.
ENDCLASS.                    "cl_events DEFINITION
*----------------------------------------------------------------------*
*       CLASS cl_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_events IMPLEMENTATION.
  METHOD handle_double_click.
    PERFORM f_double_click USING e_row.
  ENDMETHOD.                    "handle_double_click
  METHOD handle_top_of_page.
    PERFORM f_top_of_page  USING e_dyndoc_id.
  ENDMETHOD.                    "handle_top_of_page
ENDCLASS.                    "cl_events DEFINITION
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
START-OF-SELECTION.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE it_kna1
    FROM kna1
   WHERE kunnr IN s_kunnr.
  CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STU_0100'.
  IF w_cont IS INITIAL.
    PERFORM f_create_alv.
  ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'SAVE'.
      CALL METHOD w_grid->check_changed_data.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
  LEAVE TO SCREEN 0.
ENDMODULE.                 " CANCEL  INPUT
*&---------------------------------------------------------------------*
*&      Form  f_create_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_create_alv .
  DATA: lw_line TYPE i,
        liw_fieldcat TYPE lvc_s_fcat.
  CREATE OBJECT w_cont
    EXPORTING
      container_name = w_fname.
  CREATE OBJECT w_doc.
*    EXPORTING
*      style = 'ALV_GRID'.
  CREATE OBJECT w_splitter
    EXPORTING
      parent  = w_cont
      rows    = 1
      columns = 2.               "以上部分将容器w_cont分为两部分,左右两个容器
* 分配容器
  CALL METHOD w_splitter->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = w_head.
  CALL METHOD w_splitter->get_container
    EXPORTING
      row       = 1
      column    = 2
    RECEIVING
      container = w_body. "将分配好的容易分配给两个container
* 设定左边容器初始宽度
  CALL METHOD w_splitter->set_column_width
    EXPORTING
      id    = 1
      width = 45.
  CREATE OBJECT w_grid
    EXPORTING
      i_parent = w_body.  "在右边的容器中创建ALV_GRID
*  CALL METHOD w_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter.
  CREATE OBJECT w_receiver.  
  SET HANDLER w_receiver->handle_double_click FOR w_grid.
  SET HANDLER w_receiver->handle_top_of_page  FOR w_grid.
  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = w_grid.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = 'KNA1'
    CHANGING
      ct_fieldcat      = it_fieldcat.
  DESCRIBE TABLE it_fieldcat LINES lw_line.
  DELETE it_fieldcat FROM 9 TO lw_line.
  READ TABLE it_fieldcat INTO liw_fieldcat INDEX 5.
  liw_fieldcat-edit = 'X'.
  liw_fieldcat-drdn_hndl = '1'.
  liw_fieldcat-checktable = '!'.
  MODIFY it_fieldcat FROM liw_fieldcat INDEX 5.
  READ TABLE it_fieldcat INTO liw_fieldcat INDEX 6.
  liw_fieldcat-edit = 'X'.
  liw_fieldcat-drdn_hndl = '1'.
  liw_fieldcat-checktable = '!'.
  MODIFY it_fieldcat FROM liw_fieldcat INDEX 6.
  PERFORM f_fill_exclude.
  PERFORM f_dropdown.
  CALL METHOD w_grid->set_table_for_first_display
    EXPORTING
      it_toolbar_excluding = it_exclude
    CHANGING
      it_outtab            = it_kna1
      it_fieldcatalog      = it_fieldcat.
  CALL METHOD w_grid->set_ready_for_input
    EXPORTING
      i_ready_for_input = 1.
*  CALL METHOD w_doc->initialize_document.
  CALL METHOD w_grid->list_processing_events
    EXPORTING
      i_event_name = 'TOP_OF_PAGE'
      i_dyndoc_id  = w_doc.
ENDFORM.                    " f_create_alv
*&---------------------------------------------------------------------*
*&      Form  F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_fill_exclude .
  DATA liw_exclude TYPE ui_func.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND liw_exclude TO it_exclude.
  liw_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND liw_exclude TO it_exclude.
ENDFORM.                    " F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
*&      Form  F_DROPDOWN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_dropdown .
  DATA: lit_dropdown TYPE lvc_t_drop,
        liw_dropdown TYPE lvc_s_drop.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '1'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '2'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '3'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '4'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '5'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '6'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '7'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '8'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '9'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '10'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '11'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '12'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '13'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '14'.
  APPEND liw_dropdown TO lit_dropdown.
  liw_dropdown-handle = '1'.
  liw_dropdown-value  = '15'.
  APPEND liw_dropdown TO lit_dropdown.
  CALL METHOD w_grid->set_drop_down_table
    EXPORTING
      it_drop_down = lit_dropdown.
ENDFORM.                    " F_DROPDOWN
*&---------------------------------------------------------------------*
*&      Form  F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_double_click USING f_row TYPE lvc_s_row.
  DATA: w_kunnr TYPE kunnr.
  CLEAR iw_kna1.
  READ TABLE it_kna1 INTO iw_kna1 INDEX f_row-index.
  CHECK iw_kna1-kunnr IS NOT INITIAL.
  w_kunnr = iw_kna1-kunnr.
  SET PARAMETER ID 'KUN' FIELD w_kunnr.
  CALL TRANSACTION 'VD02' AND SKIP FIRST SCREEN.
  CLEAR it_kna1.
  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE it_kna1
    FROM kna1
   WHERE kunnr IN s_kunnr.
  CALL METHOD w_grid->refresh_table_display.
ENDFORM.                    " F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  F_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM f_top_of_page  USING f_doc TYPE REF TO cl_dd_document.
  DATA: lw_back TYPE sdydo_key VALUE space.
  CALL METHOD f_doc->add_text
    EXPORTING
      text      = '文本1'
      sap_style = 'HEADING'.                "大字黑体
  CALL METHOD f_doc->new_line.
  CALL METHOD f_doc->add_text
    EXPORTING
      text         =  '文本2'
      sap_emphasis = 'EMPHASIS'.               "斜体
  IF w_viewer IS INITIAL.
    CREATE OBJECT w_viewer
      EXPORTING
        parent = w_head.
  ENDIF.
  CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
    EXPORTING
      document = w_doc
      bottom   = space.
  CALL METHOD w_doc->merge_document.
  CALL METHOD w_doc->set_document_background
    EXPORTING
      picture_id = lw_back.
  w_doc->html_control = w_viewer.
  CALL METHOD w_doc->display_document
    EXPORTING
      reuse_control = 'X'
      parent        = w_head.
ENDFORM.                    " F_TOP_OF_PAG
 

转载于:https://www.cnblogs.com/clsoho/archive/2010/04/13/1711183.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值