OO弹出式ALV

弹出式alv,使用oo的写法,可以任意改变弹出框大小

*----------------------------------------------------------------------*
* class
*----------------------------------------------------------------------*
CLASS cl_event_receiver_02 DEFINITION.
  PUBLIC SECTION.
    METHODS:
      handle_hotspot_click_attach FOR EVENT hotspot_click
        OF cl_gui_alv_grid IMPORTING e_row_id e_column_id.
ENDCLASS.
CLASS cl_event_receiver_02 IMPLEMENTATION.
*---method for hotspot
  METHOD handle_hotspot_click_attach.

    PERFORM handel_hotspot_click_attach USING e_row_id e_column_id.

  ENDMETHOD.
ENDCLASS.
DATA: evt_rcver_02  TYPE REF TO cl_event_receiver_02.

CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      on_close FOR EVENT close
        OF cl_gui_dialogbox_container IMPORTING sender.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
  METHOD on_close.
    CALL METHOD sender->free.
    FREE: box_container, box_alv.
  ENDMETHOD.
ENDCLASS.

  DATA:box_container TYPE REF TO cl_gui_dialogbox_container,
       box_alv       TYPE REF TO cl_gui_alv_grid.

  DATA: ls_layout TYPE lvc_s_layo. " ALV的layout属性内表

  DATA: ls_fieldcat TYPE slis_fieldcat_alv,
        lt_fieldcat TYPE slis_t_fieldcat_alv.

  CREATE OBJECT box_container
    EXPORTING
      width   = 700      "窗口大小
      height  = 200
      top     = 100
      left    = 120
      caption = 'xxxxx' "弹出窗口标题
    EXCEPTIONS
      OTHERS  = 1.

  SET HANDLER lcl_event_handler=>on_close FOR box_container.

  CREATE OBJECT box_alv
    EXPORTING
      i_parent = box_container
    EXCEPTIONS
      OTHERS   = 1.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_internal_tabname     = 'LV_GET'
      i_inclname             = sy-repid
    CHANGING
      ct_fieldcat            = lt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
    EXPORTING
      it_fieldcat_alv = lt_fieldcat[]
    IMPORTING
      et_fieldcat_lvc = gt_fcat_02[]
    TABLES
      it_data         = lv_get[]
    EXCEPTIONS
      it_data_missing = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  LOOP AT gt_fcat_02 ASSIGNING FIELD-SYMBOL(<fc>).
    CASE <fc>-fieldname.
      WHEN 'xxxx1'.
        <fc>-coltext   = 'xxxx1'.
        <fc>-just      = 'L'.
        <fc>-key       = 'X'.
        <fc>-outputlen = '50'.
        <fc>-col_pos   = '1'.
      WHEN 'xxxx2'.
        <fc>-coltext   = 'xxxx2'.
        <fc>-just      = 'L'.
        <fc>-outputlen = '500'.
        <fc>-col_pos   = '2'.
        <fc>-hotspot  = 'X'.
    ENDCASE.
  ENDLOOP.
  "写入layout属性
  ls_layout-zebra      = 'X'.
  ls_layout-sel_mode   = 'D'.
  ls_layout-cwidth_opt = 'X'.

  CALL METHOD box_alv->set_table_for_first_display
    EXPORTING
      is_layout       = ls_layout "layout属性
      i_default       = 'X'
    CHANGING
      it_outtab       = lv_get[] "内表
      it_fieldcatalog = gt_fcat_02 "fieldcat属性
    EXCEPTIONS
      OTHERS          = 1.

  CREATE OBJECT evt_rcver_02.
  SET HANDLER evt_rcver_02->handle_hotspot_click_attach FOR box_alv.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值