ALV OO

本文介绍了一个使用 ABAP 编写的程序,该程序通过 ALV Grid 控件展示航班数据,并实现了一些基本的数据处理功能,例如计算剩余座位数量及显示图标等。此外,还包含了如何设置双击事件处理等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*& Include ZFIVE_002TOP      Module pool      ZFIVE_002
*&
*&---------------------------------------------------------------------*

PROGRAM  zfive_002 no standard page heading line-count 10.

types: begin of info,
       carrid like sflight-carrid,
       connid like sflight-connid,
       fldate like sflight-fldate,
       price like sflight-price,
       currency like sflight-currency,
       seatsmax like sflight-seatsmax,
       seatsocc like sflight-seatsocc,
       free like sflight-seatsmax,
       free_icon(30),
       end of info.

DATA:wa_info type info,
     it_info type standard table of info.

* Field position
data:  pos_free type i value 8,
       pos_icon type i value 9.

* Fieldcatalog
data: p_fieldcat type lvc_t_fcat,
      w_fieldcat like line of p_fieldcat,
      wa_sbook like sbook.


*control
DATA: p_control_contianter TYPE REF TO cl_gui_custom_container,
      alv_grid TYPE REF TO cl_gui_alv_grid.

 

DATA:ok_code LIKE sy-ucomm.
*layout
DATA:gs_layout TYPE lvc_s_layo.

DATA: GS_REPORT TYPE DISVARIANT,
      P_SAVE.

* Local class
class list_d definition.
  public section.
  methods on_dblclick for event double_click of cl_gui_alv_grid
     importing e_row e_column.
endclass.

* Double Click
data: p_double type ref to list_d.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECT-OPTIONS:p_car FOR wa_info-carrid.
SELECTION-SCREEN END OF BLOCK b2.


START-OF-SELECTION.
  SELECT *
  FROM sflight INTO CORRESPONDING FIELDS OF wa_info
  WHERE carrid IN p_car
  order by primary key.
    wa_info-free = wa_info-seatsmax - wa_info-seatsocc.
    IF wa_info-seatsmax < wa_info-seatsocc.
      wa_info-free_icon = icon_red_light.
    ELSE.
      wa_info-free_icon = icon_green_light.
    ENDIF.
    APPEND wa_info TO it_info.
  ENDSELECT.
  CALL SCREEN 100.

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE create_objects.
  MODULE layout_data.
  MODULE VARIANT.
  MODULE field_catalog.
  MODULE transfer_data.

*
PROCESS AFTER INPUT.
  MODULE exit AT EXIT-COMMAND.
  MODULE user_command_0100.


*----------------------------------------------------------------------*
***INCLUDE ZFIVE_002_STATUS_0100O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'S100'.
  SET TITLEBAR 'T100' WITH 'five'.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  CREATE_OBJECTS  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE create_objects OUTPUT.
  IF p_control_contianter IS INITIAL.
    CREATE OBJECT p_control_contianter
       EXPORTING container_name = 'P_CONTROL'.
    CREATE OBJECT alv_grid
       EXPORTING i_parent = p_control_contianter.

    CREATE OBJECT p_double.
    set handler p_double->on_dblclick for alv_grid.
  ENDIF.

ENDMODULE.                 " CREATE_OBJECTS  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  TRANSFER_DATA  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE transfer_data OUTPUT.
  CALL METHOD alv_grid->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SFLIGHT'
      is_layout        = gs_layout
      is_variant       = gs_report
      i_save           = p_save
    CHANGING
      it_outtab        = it_info
      it_fieldcatalog  = p_fieldcat.

ENDMODULE.                 " TRANSFER_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  exit  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.                 " exit  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'BACK'.
      CALL METHOD p_control_contianter->free.
      SET SCREEN 0.
    WHEN 'EXIT'.
      CALL METHOD p_control_contianter->free.
      SET SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  layout_data  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE layout_data OUTPUT.
  gs_layout-grid_title = 'five test'.
  gs_layout-detailtitl = 'test'.
  gs_layout-zebra = 'X'.
ENDMODULE.                 " layout_data  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  field_catalog  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE field_catalog OUTPUT.
  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'FREE'.
  w_fieldcat-ref_table = 'SFILGHT'.
  w_fieldcat-ref_field = 'SEATSMAX'.
  w_fieldcat-coltext = 'FIVE TEST'.
  w_fieldcat-seltext = 'FIVE TEST'.
  w_fieldcat-col_pos = pos_free.
  APPEND w_fieldcat TO p_fieldcat.

  CLEAR w_fieldcat.
  w_fieldcat-fieldname = 'FREE_ICON'.
  w_fieldcat-icon = 'X'.

  w_fieldcat-coltext = 'FREE_ICON'.
  w_fieldcat-seltext = 'FREE_ICON'.
  w_fieldcat-col_pos = pos_icon.
  APPEND w_fieldcat TO p_fieldcat.
ENDMODULE.                 " field_catalog  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  VARIANT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE variant OUTPUT.
  gs_report-report = sy-repid.
  p_save = 'A'.
ENDMODULE.                 " VARIANT  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  list  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE list OUTPUT.
  SUPPRESS DIALOG.
  SET PF-STATUS space.
  WRITE:'basic'.
  LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
  FORMAT COLOR COL_NORMAL.
  SELECT * FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
  WHERE carrid = wa_info-carrid
    AND connid = wa_info-connid
    AND fldate = wa_info-fldate.
    WRITE:/ sy-vline, wa_sbook-carrid,
              wa_sbook-connid,
              wa_sbook-fldate,
              wa_sbook-customid,
              wa_sbook-bookid, 83 sy-vline.
  ENDSELECT.
ENDMODULE.                 " list  OUTPUT
*&---------------------------------------------------------------------*
*&       Class (Implementation)  list_d
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS list_d IMPLEMENTATION.
  METHOD on_dblclick.
* valid line check
    IF e_row-rowtype = space AND NOT e_row-index IS INITIAL.
      READ TABLE it_info INDEX e_row-index INTO wa_info.
      CALL SCREEN 101.
    ELSE.
      MESSAGE 'no data' TYPE 'I'.
    ENDIF.
  ENDMETHOD.                    "dbclick
ENDCLASS.             "list_d

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-611029/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14397246/viewspace-611029/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值