如何在屏幕上显示多个alv
2011-12-06 17:59
447 查看
本文讲解如何在屏幕上显示多个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.
LE***E 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.
实现这样的需求关键是以下几点(举例:在屏幕上显示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.
LE***E 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.
相关文章推荐
- 如何在屏幕上显示多个alv
- 如何在屏幕上显示多个alv
- ABAP--如何将查询结果显示在选择屏幕上的代码
- ABAP--如何在选择屏幕上输出ALV GRID报表
- Webview--如何让加载进来的页面自适应手机屏幕分辨率居中显示
- 如何让Android中 dialog显示在屏幕底部
- Android高德地图如何让轨迹全部显示在屏幕内 且自动缩放
- 在9530手机上面,如何控制程序只能纵向显示?如何判断当前的屏幕横纵方向呢?
- popupwindow全屏幕显示被状态栏挡住如何解决+Android获取状态栏高度
- 如何在console输入密码的时候不在屏幕上显示?
- 如何实现类似KTV中屏幕歌词显示
- 如何根据移动端设备宽度来设置超过屏幕宽度的多余字显示为省略号
- 如何让多个显示器显示不同屏幕
- android 当屏幕截图,你如何改变屏幕内容,他们俩bitmap将合并的图像被一起显示
- 如何将安卓系统的手机屏幕实时同步显示在电脑上(包括无线与USB有线方式含DLNA)
- 如何使用手机作为树莓派的显示屏幕
- 如何让windows上的两个屏幕显示不同页面
- ABAP--如何将查询结果显示在选择屏幕上的代码
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- 如何在关闭vim文件后,屏幕上还显示之前文件的内容