日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OO实现ALV TABLE 二:ALV显示的三种形式

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OO实现ALV TABLE 二:ALV显示的三种形式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般的ALV有三種顯示形式,分別為

一、普通的List

?

二、全屏的Grid

?

?

三、在自定義屏幕的顯示的Grid

?

跟以往實現這三種ALV顯示方式相比,以往的三種顯示方式分別是調用不同的Function和Class,實現方式復雜。現在這三種顯示方式可以通過一個類(CL_SALV_TABLE)來實現,而且通過這個類和它的子類可以更加容易的實現ALV的功能,比如:排序,總計,過濾,頁眉頁腳,單擊雙擊事件等。

?

下面讓我們一步一步地來實現這三種顯示形式。

?

1.首先我們先創建選擇屏幕,屏幕有三個選項,三個選項分別為三種顯示方式。

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

? PARAMETERS: p_full RADIOBUTTON GROUP rg,

????????????? p_list RADIOBUTTON GROUP rg,

????????????? p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

?

2取得要顯示的數據。

SELECT * INTO TABLE lt_tab FROM spfli

?

3.判斷選擇屏幕的選項創建不同的實例。

?? CASE 'X'.

????? WHEN p_full.?????????????

??????? me->alv_full( lt_tab ).

????? WHEN p_list.

??????? me->alv_list( lt_tab ).

????? WHEN p_grid.

??????? me->alv_grid( lt_tab ).

ENDCASE.

?

4.當用戶選擇第一個選項,列表輸出為全屏的網格列表,執行方法alv_full( )。

METHOD alv_full.

??? "創建實例

??? TRY.

??????? cl_salv_table=>factory(

????????? IMPORTING

??????????? r_salv_table = gr_table

????????? CHANGING

??????????? t_table????? = lt_tab

??????? ).

????? CATCH cx_salv_msg.

?? ?ENDTRY.

?

??? "顯示列表

??? gr_table->display( ).

? ENDMETHOD.??????????????????? "alv_full

?

?

5.當用戶選擇第二個選項,列表輸出為普通的列表,執行方法alv_list( ).alv_list方法跟alv_full方法不同的是在創建實例的時候多了一個選項list_display = ‘X’.

? METHOD alv_list.

??? "創建實例

??? TRY.

??????? cl_salv_table=>factory(

????????? EXPORTING

??????????? list_display = 'X'

????????? IMPORTING

??????????? r_salv_table = gr_table

????????? CHANGING

??????????? t_table????? = lt_tab

??????? ).

????? CATCH cx_salv_msg.

??? ENDTRY.

?

??? "顯示列表

??? gr_table->display( ).

? ENDMETHOD.??????????????????? "alv_list

?

6.當用戶選擇第三個選項,列表在自定義屏幕上輸出網格列表,執行方法alv_grid( ).方法alv_grid()調用了屏幕100。執行屏幕的時候會執行它的PBO和PAI,也就是會執行module status_0100和user_command_0100。Status_0100的代碼是:

? ??"定義變量

? DATA: lr_container TYPE REF TO cl_gui_custom_container,

?????? ?lr_alv2?????? TYPE REF TO lcl_alv,

??????? lt_tab?????? TYPE TABLE OF spfli.

? "創建容器實例

? IF cl_salv_table=>is_offline( ) = ''.

??? CREATE OBJECT lr_container

????? EXPORTING

??????? container_name = 'CONTAINER'.

? ENDIF.

? "創建類LCL_ALV實例

? CREATE OBJECT lr_alv2.

? "取得列表數據

? lt_tab = lr_alv2->getdata( ).

? "創建ALV實例

? TRY.

????? cl_salv_table=>factory(

??????? EXPORTING

????????? r_container??? = lr_container

????????? container_name = 'CONTAINER'

??????? IMPORTING

????????? r_salv_table?? = gr_table

??????? CHANGING

????????? t_table??????? = lt_tab

????? ).

??? CATCH cx_salv_msg.

? ENDTRY.

? "顯示ALV列表

? gr_table->display( ).

? "釋放內存

? FREE lt_tab.

?

下面是程序的所有代碼:

REPORT? y_xin_002.

?

*變量定義

TYPES ty_spfli TYPE spfli OCCURS 0.

DATA: gr_table???? TYPE REF TO cl_salv_table.

?

*選擇屏幕設計

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

PARAMETERS: p_full RADIOBUTTON GROUP rg,

??????????? p_list RADIOBUTTON GROUP rg,

??????????? p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

?

*----------------------------------------------------------------------*

*?????? CLASS lcl_alv DEFINITION

*----------------------------------------------------------------------*

*?????? ALV操作類定義

*----------------------------------------------------------------------*

CLASS lcl_alv DEFINITION.

? PUBLIC SECTION.

??? METHODS: getdata???????? "取得要顯示的數據

?????????????? RETURNING value(lt_tab) TYPE ty_spfli,

???????????? alv_full??????? "全屏Grid列表處理方法

?????????????? IMPORTING value(lt_tab) TYPE ty_spfli,

???????????? alv_list??????? "普通List處理方法

?????????????? IMPORTING value(lt_tab) TYPE ty_spfli,

???????????? alv_grid??????? "在自定義屏幕上顯示的列表

?????????????? IMPORTING value(lt_tab) TYPE ty_spfli,

???????????? main.?????????? "主方法

ENDCLASS.??????????????????? "lcl_alv DEFINITION

?

?

*----------------------------------------------------------------------*

*?????? CLASS lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

*?????? ALV操作類(實現)

*----------------------------------------------------------------------*

CLASS lcl_alv IMPLEMENTATION.

*取得要顯示的數據

? METHOD getdata.

??? SELECT * INTO TABLE lt_tab FROM spfli.

? ENDMETHOD.??????????????????? "getdata

?

*輸出全屏網格列表的方法

? METHOD alv_full.

??? "創建實例

??? TRY.

??????? cl_salv_table=>factory(

????????? IMPORTING

???????? ???r_salv_table = gr_table

????????? CHANGING

??????????? t_table????? = lt_tab

??????? ).

????? CATCH cx_salv_msg.

??? ENDTRY.

?

??? "顯示列表

??? gr_table->display( ).

? ENDMETHOD.??????????????????? "alv_full

?

*輸出全屏普通列表的方法

? METHOD alv_list.

??? "創建實例

??? TRY.

??????? cl_salv_table=>factory(

????????? EXPORTING

??????????? list_display = 'X'

????????? IMPORTING

??????????? r_salv_table = gr_table

????????? CHANGING

??????????? t_table????? = lt_tab

??????? ).

????? CATCH cx_salv_msg.

??? ENDTRY.

?

??? "顯示列表

? ??gr_table->display( ).

? ENDMETHOD.??????????????????? "alv_list

?

*輸出在自定義屏幕上的列表

? METHOD alv_grid.

??? CALL SCREEN '0100'.

? ENDMETHOD.??????????????????? "alv_grid

?

*主方法整合數據

? METHOD main.

??? DATA: lt_tab TYPE TABLE OF spfli.

?

??? "取得要顯示的數據

??? lt_tab = me->getdata( ).

?

??? "判斷選擇屏幕的選擇條件調用不同的方法

??? CASE 'X'.

????? WHEN p_full.

??????? me->alv_full( lt_tab ).

????? WHEN p_list.

??????? me->alv_list( lt_tab ).

????? WHEN p_grid.

??????? me->alv_grid( lt_tab ).

??? ENDCASE.

? ENDMETHOD.??????????????????? "main

ENDCLASS.??????????????????? "lcl_alv IMPLEMENTATION

?

*----------------------------------------------------------------------*

*? MODULE status_0100

*----------------------------------------------------------------------*

*? PBO 屏幕輸出前執行

*----------------------------------------------------------------------*

MODULE status_0100 OUTPUT.

? "定義變量

? DATA: lr_container TYPE REF TO cl_gui_custom_container,

??????? lr_alv2?????? TYPE REF TO lcl_alv,

??????? lt_tab?????? TYPE TABLE OF spfli.

? "創建容器實例

? IF cl_salv_table=>is_offline( ) = ''.

??? CREATE OBJECT lr_container

????? EXPORTING

??????? container_name = 'CONTAINER'.

? ENDIF.

? "創建類LCL_ALV實例

? CREATE OBJECT lr_alv2.

? "取得列表數據

? lt_tab = lr_alv2->getdata( ).

? "創建ALV實例

? TRY.

????? cl_salv_table=>factory(

??????? EXPORTING

????????? r_container??? = lr_container

????????? container_name = 'CONTAINER'

??????? IMPORTING

????????? r_salv_table?? = gr_table

??????? CHANGING

????????? t_table??????? = lt_tab

????? ).

??? CATCH cx_salv_msg.

? ENDTRY.

? "顯示ALV列表

??gr_table->display( ).

? "釋放內存

? FREE lt_tab.

ENDMODULE.??????????????????? "status_0100

?

*----------------------------------------------------------------------*

*? MODULE user_command_0100

*----------------------------------------------------------------------*

*? PAI 屏幕輸出后的動作

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

ENDMODULE.??????????????????? "user_command_0100

?

*報表執行

START-OF-SELECTION.

? DATA? lr_alv?? TYPE REF TO lcl_alv.

? CREATE OBJECT lr_alv.

? lr_alv->main( ).
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的OO实现ALV TABLE 二:ALV显示的三种形式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。