怎样在屏幕上显示多个alv

it2025-06-17  7

本文解说怎样在屏幕上显示多个alv.

实现这种需求关键是下面几点(举例:在屏幕上显示4个alv):

1.须要定义4个alv control

2.由于有4个alv control,于是就须要定义4个容器装这4个控件

3.为了合理布局这4个容器,就要将这4个容器嵌入另外一个splitter 容器中

4.可是splitter容器又仅仅能置入其它容器中,那么就须要再定义一个容器

总之,须要3层容器和1层控件,总共要定义6个容器和4个控件

5.最里面的容器应该是cl_gui_custom_container类型。基于屏幕容器区域创建该容器

6.再在最底层容器里面嵌入splitter 容器

7.依据splitter容器创建4个镶嵌在其内的alv容器

8.再在alv容器中创建alv控件

9.调用alv的方法现实内表数据

下面是屏幕上显示4个alv的实例:

主程序代码:

TYPE-POOLS: slis, icon.

TABLES: sflight, spfli, scarr, sbook. *   Define okcode DATA: ok_code TYPE sy-ucomm.

*   Define objects used in screen DATA: go_split_container TYPE REF TO cl_gui_splitter_container. DATA: go_container TYPE REF TO cl_gui_custom_container. DATA: go_container1 TYPE REF TO cl_gui_container. DATA: go_container2 TYPE REF TO cl_gui_container. DATA: go_container3 TYPE REF TO cl_gui_container. DATA: go_container4 TYPE REF TO cl_gui_container. DATA: go_alv_control1 TYPE REF TO cl_gui_alv_grid. DATA: go_alv_control2 TYPE REF TO cl_gui_alv_grid. DATA: go_alv_control3 TYPE REF TO cl_gui_alv_grid. DATA: go_alv_control4 TYPE REF TO cl_gui_alv_grid.

*   Define internal tables and structures DATA: BEGIN OF gs_sflight,       carrid TYPE sflight-carrid,       connid TYPE sflight-connid,       fldate TYPE sflight-fldate,       price  TYPE sflight-price,       END   OF gs_sflight.

DATA: BEGIN OF gs_spfli,       carrid TYPE spfli-carrid,       connid TYPE spfli-connid,       cityfrom TYPE spfli-cityfrom,       cityto TYPE spfli-cityto,       END   OF gs_spfli.

DATA: BEGIN OF gs_scarr,       carrid TYPE scarr-carrid,       carrname TYPE scarr-carrname,       END   OF gs_scarr.

DATA: BEGIN OF gs_sbook,       carrid TYPE sbook-carrid,       connid TYPE sbook-connid,       bookid TYPE sbook-bookid,       customid TYPE sbook-customid,       END   OF gs_sbook.

*   Define alv components DATA: gs_field_cat1 TYPE lvc_s_fcat. DATA: gs_field_cat2 TYPE lvc_s_fcat. DATA: gs_field_cat3 TYPE lvc_s_fcat. DATA: gs_field_cat4 TYPE lvc_s_fcat. DATA: gt_field_cat1 TYPE lvc_t_fcat. DATA: gt_field_cat2 TYPE lvc_t_fcat. DATA: gt_field_cat3 TYPE lvc_t_fcat. DATA: gt_field_cat4 TYPE lvc_t_fcat.

*   Define displayed data DATA: gt_sflight LIKE STANDARD TABLE OF gs_sflight,       gt_spfli LIKE STANDARD TABLE OF gs_spfli,       gt_scarr LIKE STANDARD TABLE OF gs_scarr,       gt_sbook LIKE STANDARD TABLE OF gs_sbook.

START-OF-SELECTION.   PERFORM sub_retrieve_data.   PERFORM sub_alv_data.   CALL SCREEN 9100. *&---------------------------------------------------------------------* *&      Form  SUB_RETRIEVE_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* *  -->  p1        text *  <--  p2        text *----------------------------------------------------------------------* FORM sub_retrieve_data .

  SELECT     carrid     connid     fldate     price     INTO CORRESPONDING FIELDS OF TABLE gt_sflight     FROM sflight.

  SELECT     carrid     connid     cityfrom     cityto     INTO CORRESPONDING FIELDS OF TABLE gt_spfli     FROM spfli.

  SELECT     carrid     carrname     INTO CORRESPONDING FIELDS OF TABLE gt_scarr     FROM scarr.

  SELECT     carrid     connid     bookid     customid     INTO CORRESPONDING FIELDS OF TABLE gt_sbook     FROM sbook. ENDFORM.                    " SUB_RETRIEVE_DATA *&---------------------------------------------------------------------* *&      Form  SUB_ALV_DATA *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* FORM sub_alv_data . *   Build field catelog 1   gs_field_cat1-col_pos = 1.   gs_field_cat1-fieldname = 'CARRID'.   gs_field_cat1-scrtext_m = 'airline code'.   APPEND gs_field_cat1 TO gt_field_cat1.   gs_field_cat1-col_pos = 2.   gs_field_cat1-fieldname = 'CONNID'.   gs_field_cat1-scrtext_m = 'connection number'.   APPEND gs_field_cat1 TO gt_field_cat1.   gs_field_cat1-col_pos = 3.   gs_field_cat1-fieldname = 'FLDATE'.   gs_field_cat1-scrtext_m = 'flight date'.   APPEND gs_field_cat1 TO gt_field_cat1.   gs_field_cat1-col_pos = 4.   gs_field_cat1-fieldname = 'PRICE'.   gs_field_cat1-scrtext_m = 'flight price'.   APPEND gs_field_cat1 TO gt_field_cat1.

*   Build field catelog 2   gs_field_cat2-col_pos = 1.   gs_field_cat2-fieldname = 'CARRID'.   gs_field_cat2-scrtext_m = 'airline code'.   APPEND gs_field_cat2 TO gt_field_cat2.   gs_field_cat2-col_pos = 2.   gs_field_cat2-fieldname = 'CONNID'.   gs_field_cat2-scrtext_m = 'connection number'.   APPEND gs_field_cat2 TO gt_field_cat2.   gs_field_cat2-col_pos = 3.   gs_field_cat2-fieldname = 'CITYFROM'.   gs_field_cat2-scrtext_m = 'city from'.   APPEND gs_field_cat2 TO gt_field_cat2.   gs_field_cat2-col_pos = 4.   gs_field_cat2-fieldname = 'CITYTO'.   gs_field_cat2-scrtext_m = 'city to'.   APPEND gs_field_cat2 TO gt_field_cat2.

*   Build field catelog 3   gs_field_cat3-col_pos = 1.   gs_field_cat3-fieldname = 'CARRID'.   gs_field_cat3-scrtext_m = 'airline code'.   APPEND gs_field_cat3 TO gt_field_cat3.   gs_field_cat3-col_pos = 2.   gs_field_cat3-fieldname = 'CONNID'.   gs_field_cat3-scrtext_m = 'connection number'.   APPEND gs_field_cat3 TO gt_field_cat3.

*   Build field catelog 4   gs_field_cat4-col_pos = 1.   gs_field_cat4-fieldname = 'CARRID'.   gs_field_cat4-scrtext_m = 'airline code'.   APPEND gs_field_cat4 TO gt_field_cat4.   gs_field_cat4-col_pos = 2.   gs_field_cat4-fieldname = 'CONNID'.   gs_field_cat4-scrtext_m = 'connection number'.   APPEND gs_field_cat4 TO gt_field_cat4.   gs_field_cat4-col_pos = 3.   gs_field_cat4-fieldname = 'BOOKID'.   gs_field_cat4-scrtext_m = 'book id'.   APPEND gs_field_cat4 TO gt_field_cat4.   gs_field_cat4-col_pos = 4.   gs_field_cat4-fieldname = 'CUSTOMID'.   gs_field_cat4-scrtext_m = 'custom id'.   APPEND gs_field_cat4 TO gt_field_cat4. ENDFORM.                    " SUB_ALV_DATA *&---------------------------------------------------------------------* *&      Module  ALV_DISPLAY  OUTPUT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* MODULE alv_display OUTPUT.   IF go_split_container IS INITIAL.

    CREATE OBJECT go_container       EXPORTING         container_name = 'GO_CONTAINER'.

    CREATE OBJECT go_split_container       EXPORTING         link_dynnr = sy-dynnr         link_repid = sy-repid         parent     = go_container         rows       = 2         columns    = 2         name       = 'GO_SPLIT_CONTAINER'.

 

    CALL METHOD go_split_container->get_container       EXPORTING         row       = 1         column    = 1       RECEIVING         container = go_container1.

    CALL METHOD go_split_container->get_container       EXPORTING         row       = 1         column    = 2       RECEIVING         container = go_container2.

    CALL METHOD go_split_container->get_container       EXPORTING         row       = 2         column    = 1       RECEIVING         container = go_container3.

    CALL METHOD go_split_container->get_container       EXPORTING         row       = 2         column    = 2       RECEIVING         container = go_container4.

    CREATE OBJECT go_alv_control1       EXPORTING         i_parent = go_container1.

    CREATE OBJECT go_alv_control2       EXPORTING         i_parent = go_container2.

    CREATE OBJECT go_alv_control3       EXPORTING         i_parent = go_container3.

    CREATE OBJECT go_alv_control4       EXPORTING         i_parent = go_container4.

    CALL METHOD go_alv_control1->set_table_for_first_display       CHANGING         it_outtab       = gt_sflight         it_fieldcatalog = gt_field_cat1.

    CALL METHOD go_alv_control2->set_table_for_first_display       CHANGING         it_outtab       = gt_spfli         it_fieldcatalog = gt_field_cat2.

    CALL METHOD go_alv_control3->set_table_for_first_display       CHANGING         it_outtab       = gt_scarr         it_fieldcatalog = gt_field_cat3.

    CALL METHOD go_alv_control4->set_table_for_first_display       CHANGING         it_outtab       = gt_sbook         it_fieldcatalog = gt_field_cat4.

  ELSE.     CALL METHOD go_alv_control1->refresh_table_display.     CALL METHOD go_alv_control2->refresh_table_display.     CALL METHOD go_alv_control3->refresh_table_display.     CALL METHOD go_alv_control4->refresh_table_display.   ENDIF. ENDMODULE.                 " ALV_DISPLAY  OUTPUT *&---------------------------------------------------------------------* *&      Module  STATUS_9100  OUTPUT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* MODULE status_9100 OUTPUT.   SET PF-STATUS 'STATUS9100'. ENDMODULE.                 " STATUS_9100  OUTPUT *&---------------------------------------------------------------------* *&      Module  USER_COMMAND_9100  INPUT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* MODULE user_command_9100 INPUT.   CASE ok_code.     WHEN 'PBAK'.       CALL METHOD go_alv_control1->free.       CALL METHOD go_alv_control2->free.       CALL METHOD go_alv_control3->free.       CALL METHOD go_alv_control4->free.       CALL METHOD go_container1->free.       CALL METHOD go_container2->free.       CALL METHOD go_container3->free.       CALL METHOD go_container4->free.       CALL METHOD go_split_container->free.       CALL METHOD go_container->free.       LEAVE PROGRAM.     WHEN OTHERS.   ENDCASE. ENDMODULE.                 " USER_COMMAND_9100  INPUT

屏幕9100中的代码:

PROCESS BEFORE OUTPUT.   MODULE status_9100.   MODULE alv_display.

PROCESS AFTER INPUT.   MODULE user_command_9100.

转载于:https://www.cnblogs.com/bhlsheji/p/5120301.html

相关资源:数据结构—成绩单生成器
最新回复(0)