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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

OOnbsp;ALV常用功能完整简例(热键单击…

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OOnbsp;ALV常用功能完整简例(热键单击… 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OO ALV 常用功能簡介

目錄

OO ALV 常用功能簡介... 1

一、所用類:... 2

二、效果圖:... 2

單擊... 2

雙擊... 2

F4幫助... 3

編輯某單元格并校驗... 3

三、實現過程:... 3

1 創建一個屏幕9001,不需要畫任何控件

2、 定義數據:... 3

3、 獲取顯示數據:... 4

4、 alv?顯示數據... 4



?

一、所用類:

cl_gui_alv_grid

cl_gui_docking_container

二、效果圖:

???? 執行:

??

單擊

???? 單擊航線單元格:


?

雙擊

??? 雙擊連接號碼單元格:




?

F4幫助

?? 航班單元格上F4或點擊 后面的小按鈕

?

? ?(本功能在設置字段樣式時實現DEFINE?mac_fieldlog.

?? ??"設置參考表和參考字段,為了提供搜索幫助
??wa_fieldcatalog
-ref_table???????=?&4.????????????"參考表
??wa_fieldcatalog
-ref_field???????=?&5.????????????"參考字段

????

? ? ?

編輯某單元格并校驗

?修改價格后隨便點擊某個按鈕或者雙擊某個字段,觸發:handle_data_changed

?

三、實現過程:

1、 創建一個屏幕9001,不需要畫

2、 定義數據:

*&---------------------------------------------------------------

*&??ALV??全局變量
*&---------------------------------------------------------------

DATA:?g_alv_grid????TYPE?REF?TO?cl_gui_alv_grid,"ALV控件
??????alv_ctner?????
TYPE?REF?TO?cl_gui_docking_container.


DATA:?wa_fieldcatalog????TYPE?lvc_s_fcat,????"顯示數據列內表工作區域
??????it_fieldcatalog????
TYPE?lvc_t_fcat.????"顯示數據列內表

DATA:?g_event????????????? TYPE?REF?TO?alv_event_receiver.
*&---------------------------------------------------------------
*&??全局變量
*&---------------------------------------------------------------
DATA:
??????
BEGIN?OF?str_spfli,
????????
checkbox?TYPE?char1,????????????????????? "復選框
????????carrid???
TYPE??sflight-carrid???????,?"航線承運人ID
????????connid???
TYPE??sflight-connid???????,?"航班連接?Id
????????fldate???
TYPE??sflight-fldate???????,?"航班日期
????????price????
TYPE??sflight-price????????,?"航空運費
??????
END?OF??str_spfli.

DATA:
??????g_it_show?
LIKE?TABLE?OF?str_spfli?WITH?KEY?checkbox?carrid.
??????g_wa_show?
LIKE?str_spfli.

?

?

3、 獲取顯示數據:

??"獲取數據
??
SELECT?carrid
?????????connid
?????????fldate
?????????price
????
FROM?sflight?INTO?CORRESPONDING?FIELDS?OF??TABLE?g_it_show.

4、 alv?顯示數據

PROCESS?BEFORE?OUTPUT.
?
MODULE?STATUS_9001.
?
"alv?顯示數據
?
MODULE?MDL_ALV_SHOW.

*&---------------------------------------------------------------

module?MDL_ALV_SHOW?output.
PERFORM?zform_alv_show.

endmodule.???????

*&---------------------------------------------------------------

?

FORM?zform_alv_show?.
??
DATA:???l_style??????TYPE?i,
??????????ls_layout????
TYPE?lvc_s_layo,
??????????is_stable????
TYPE?lvc_s_stbl,
??????????l_disvariant?
TYPE?disvariant.

*?屏幕初始化
??
IF?alv_ctner?IS?INITIAL.

????
CREATE?OBJECT?alv_ctner
??????
EXPORTING
????????repid???????????????????????
=?sy-repid
????????dynnr???????????????????????
=?'9001'
*???????side????????????????????????=?cl_gui_docking_container=>dock_at_right??????”ALV貼屏幕右邊,從屏幕右邊開始算寬度
????????side????????????????????????
=?cl_gui_docking_container=>dock_at_left???????"ALV貼屏幕左邊,從左邊算屏幕寬度,
????????extension???????????????????
=?900??????????????????????????????????????????"屏幕寬度
????????style???????????????????????
=?cl_gui_control=>ws_child?????????????????????"可選參數,設置ALV是否可用手動拖動大小
??????
EXCEPTIONS
????????cntl_error??????????????????
=?1
????????cntl_system_error???????????
=?2
????????create_error????????????????
=?3
????????lifetime_error??????????????
=?4
????????lifetime_dynpro_dynpro_link?
=?5
????????
OTHERS??????????????????????=?6.

????
IF?sy-subrc?<>?0.
??????
MESSAGE?s001(00)?WITH?'屏幕初始化失敗'.
??????
LEAVE?LIST-PROCESSING.
????
ENDIF.

*添加自定義工具條
????
PERFORM?frm_set_alv_toolbar.
*
????
CREATE?OBJECT?g_alv_grid
??????
EXPORTING
????????i_parent?
=?alv_ctner.

*構建顯示字段樣式
????
PERFORM?frm_build_fieldcat.

????
"Set/Reset?Ready?for?Input?Status
????
CALL?METHOD?g_alv_grid->set_ready_for_input
??????
EXPORTING
????????i_ready_for_input?
=?1.

*?layout?設定樣式
????
CLEAR?ls_layout.
????ls_layout
-cwidth_opt?=?'X'.?????"優化列寬

????
CLEAR?l_disvariant.
????l_disvariant
-report?=?sy-repid.?"當前程序

*?event??綁定事件
????
CREATE?OBJECT?g_event.


????
"自定義工具條
????
SET?HANDLER?g_event->toolbar?????????????FOR?g_alv_grid.??

??? "數據修改事件??

SET?HANDLER?g_event->handle_data_changed?FOR?g_alv_grid.

"單擊某一單元格事件
????
SET?HANDLER?g_event->handle_cell_click???FOR?g_alv_grid.

"用戶點擊工具條上按鈕觸發的事件
????
SET?HANDLER?g_event->handle_user_command?FOR?g_alv_grid.

"雙擊某一單元格事件
????
SET?HANDLER?g_event->handle_double_click?FOR?g_alv_grid.

?

"以下兩個方法達到的效果是:光標離開正在編輯的單元格時,

就觸發了handle_data_changed
???
"如果不注釋掉以下兩個方法,

則只有執行下一操作時才會觸發handle_data_changed,比如點保存、刪除
????
CALL?METHOD?g_alv_grid->register_edit_event
??????
EXPORTING
????????i_event_id?
=?cl_gui_alv_grid=>mc_evt_modified.

????
CALL?METHOD?g_alv_grid->register_edit_event
??????
EXPORTING
????????i_event_id?
=?cl_gui_alv_grid=>mc_evt_enter.

*???"顯示內表數據
????
CALL?METHOD?g_alv_grid->set_table_for_first_display
??????
EXPORTING
????????is_layout????????????
=?ls_layout
????????is_variant???????????
=?l_disvariant
????????it_toolbar_excluding?
=?gt_tools
??????
CHANGING
????????it_fieldcatalog??????
=?it_fieldcatalog[]
????????it_outtab????????????
=?g_it_show[].

??
ELSE.

????
"沖銷設置tcode??RELOAD,防止因為原來的tcode影響程序執行
????
CALL?METHOD?cl_gui_cfw=>set_new_ok_code
??????
EXPORTING
????????new_code?
=?'RELOAD'.

????
"ALV?控制:刷新穩定性?按行刷新,可選參數
????
CLEAR?is_stable.
????is_stable
-col?=?'X'.

????
"刷新
????
CALL?METHOD?g_alv_grid->refresh_table_display
??????
EXPORTING
????????is_stable?
=?is_stable
????????i_soft_refresh?
=?'X'.

????
"提交
????
CALL?METHOD?cl_gui_cfw=>flush.

??
ENDIF.
ENDFORM.????????????????????"?ZFORM_ALV_SHOW

?

?

其中:

添加工具條上常用按鈕

FORM?frm_set_alv_toolbar?.
??
REFRESH?gt_tools[].

"你也可以刪除標準的功能按鈕


? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&DETAIL'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&REFRESH'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&LOCAL&UNDO'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&SORT_ASC'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&SORT_DSC'.


? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&FIND'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&FIND_MORE'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_FILTER'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_SUM'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_SUBTOT'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_EXPORT'.

? ? DELETE e_object->mt_toolbar WHERE FUNCTION = '&MB_VARIANT'.


? ? DELETE e_object->mt_toolbar WHERE quickinfo = '插入行'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '刪除行'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '剪切'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '復制文本'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '插入總覽'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '附加行'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '復制行'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '視圖'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '顯示圖形'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '撤銷'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '明細'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '打印'.

? ? DELETE e_object->mt_toolbar WHERE quickinfo = '最終用戶文檔'.


??
APPEND?cl_gui_alv_grid=>mc_fc_check?????????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_cut???????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_copy??????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_copy_row??????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_delete_row????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_insert_row????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_move_row??????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_paste?????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_paste_new_row?TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_sum???????????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_info??????????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_refresh???????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_graph?????????????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_append_row????TO?gt_tools.
??
APPEND?cl_gui_alv_grid=>mc_fc_loc_undo??????????TO?gt_tools.
ENDFORM.????????????????????"?FRM_SET_ALV_TOOLBAR

?

設置顯示字段和其參考字段


DEFINE?mac_fieldlog.
*?g_pos?=?g_pos?+?1.???????????????????????????????"第幾列
*?wa_fieldcatalog-col_pos?????????=?g_pos.?????????"
??wa_fieldcatalog
-fieldname???????=?&1.????????????"字段名稱
*?wa_fieldcatalog-coltext?????????=?&2.????????????"顯示名稱,跟reptext效果基本相同
??wa_fieldcatalog
-reptext?????????=?&2.
??wa_fieldcatalog
-outputlen???????=?&3.????????????"顯示長度

??
"設置參考表和參考字段,為了提供搜索幫助
??wa_fieldcatalog
-ref_table???????=?&4.????????????"參考表
??wa_fieldcatalog
-ref_field???????=?&5.????????????"參考字段

??
"設置復選框可編輯
??
if?&1?eq?'CHECKBOX'.
????wa_fieldcatalog
-checkbox??????=?'X'.
????wa_fieldcatalog
-edit??????????=?'X'.
??
endif.

??
"設置?價格PRICE字段?可修改
??
if?&1?eq?'PRICE'.
????wa_fieldcatalog
-edit?=?'X'.
??
endif.

??
"設置???航線承運人字段?CARRID?為熱鍵
??
if?&1?eq?'CARRID'.
????wa_fieldcatalog
-hotspot?=?'X'.
??
endif.

??
append?wa_fieldcatalog?to?it_fieldcatalog.
??
clear?wa_fieldcatalog.
END-OF-DEFINITION.

?
FORM?frm_build_fieldcat?.

mac_fieldlog?'CHECKBOX'?'選擇'?????????''????'?'?????'?'??.

mac_fieldlog?'CARRID'???'航線承運人'???''????'SFLIGHT'?'CARRID'.

mac_fieldlog?'CONNID'???'航班數量'?????''????'SFLIGHT'?'CONNID'?.
??mac_fieldlog?
'FLDATE'???'國家'?????????''????'SFLIGHT'?'FLDATE?'.??"最后兩個字段?參考表內字段,可以作為幫助
??mac_fieldlog?
'PRICE'????'起飛城市'?????''????'SFLIGHT'?'PRICE'??.
ENDFORM.?"?FRM_BUILD_FIELDCAT

?

事件的定義

*----------------------------------------------------------------
*???????CLASS?ALV_EVENT_RECEIVER?DEFINITION
*----------------------------------------------------------------

CLASS?alv_event_receiver?DEFINITION.
??
PUBLIC?SECTION.

????
"添加工具條
????
METHODS?toolbar??????????????FOR?EVENT?toolbar?????OF?cl_gui_alv_grid
???????
IMPORTING
?????????e_object
?????????e_interactive
.

????
"子都修改時觸發
????
METHODS?handle_data_changed??FOR?EVENT?data_changed?OF?cl_gui_alv_grid
??????
IMPORTING
????????er_data_changed
.


????
"某字段設置熱鍵后,單擊此單元格時觸發
????
METHODS??handle_cell_click???FOR?EVENT?hotspot_click?OF?cl_gui_alv_grid
??????
IMPORTING
????????e_row_id
????????e_column_id
????????es_row_no
.

????
"雙擊時觸發
????
METHODS?handle_double_click??FOR?EVENT?double_click??OF?cl_gui_alv_grid
??????
IMPORTING
????????e_row
????????e_column
????????es_row_no
.

????
"F1時觸發
????
METHODS?handle_onf1??????????FOR?EVENT?onf1??????????OF?cl_gui_alv_grid
???????
IMPORTING
????????e_fieldname
????????es_row_no
????????er_event_data
.

????
"當用戶按屏幕上按鈕時觸發
????
METHODS?handle_user_command??FOR?EVENT?user_command??OF?cl_gui_alv_grid
???????
IMPORTING
?????????e_ucomm
.
????
.
ENDCLASS.????????????????????"alv_event_receiver?DEFINITION


*&---------------------------------------------------------------------*
*&??Class?(Implementation)??ALV_EVENT_RECEIVER
*&---------------------------------------------------------------------*

CLASS?alv_event_receiver?IMPLEMENTATION.
??
METHOD?handle_data_changed.

????
DATA:
??????????l_it_data???
TYPE??lvc_t_modi,
??????????l_wa_data???
LIKE?LINE?OF?l_it_data.

????
DATA:?l_price_old?TYPE?string,
??????????l_price_new?
TYPE?string,
??????????l_msg???????
TYPE?string.

????l_it_data?
=?er_data_changed->mt_mod_cells.


????
LOOP?AT?er_data_changed->mt_mod_cells?INTO?l_wa_data?WHERE??fieldname?=?'PRICE'.

??????
READ?TABLE?g_it_show?INTO?g_wa_show?INDEX?l_wa_data-row_id.
??????
IF?sy-subrc?=?0.
????????l_price_old?
=?g_wa_show-price?.
????????l_price_new?
=?l_wa_data-value?.
????????
IF?l_price_old?<>?l_price_new.
??????????
CONCATENATE?'價格由'?l_price_old?'改為'?l_price_new?INTO?l_msg.
??????????
MESSAGE?l_msg?TYPE?'I'.
????????
ENDIF.
??????
ENDIF.
????
ENDLOOP.




??
ENDMETHOD.????????????????????"handle_data_changed
??
METHOD?toolbar.
????
DATA:?ls_toolbar??TYPE?stb_button.

????
CLEAR?ls_toolbar.
????
MOVE?3????????????TO?ls_toolbar-butn_type.??????"分隔符
????
APPEND?ls_toolbar?TO?e_object->mt_toolbar.

????
CLEAR?ls_toolbar.
????
MOVE?'SEL_ALL'???????TO?ls_toolbar-function.??????"添加兩個按鈕?全選???取消全選
????
MOVE?icon_select_all?TO?ls_toolbar-icon.
????
MOVE?'全選'??????????TO?ls_toolbar-quickinfo.
????
MOVE?'?'?????????????TO?ls_toolbar-disabled.
????
APPEND?ls_toolbar????TO?e_object->mt_toolbar.


????
CLEAR?ls_toolbar.
????
MOVE?'CAN_ALL'??????????TO?ls_toolbar-function.
????
MOVE?icon_deselect_all??TO?ls_toolbar-icon.
????
MOVE?'全部取消?'?????????TO?ls_toolbar-quickinfo.
????
MOVE?'?'????????????????TO?ls_toolbar-disabled.
????
APPEND?ls_toolbar???????TO?e_object->mt_toolbar.

????
CLEAR?ls_toolbar.
????
MOVE?0?????????????TO?ls_toolbar-butn_type.??????????????"按鈕
????
MOVE?'DELETE'??????TO?ls_toolbar-function.???????????????"功能碼
????
MOVE?'DELETE'??????TO?ls_toolbar-text.???????????????????"顯示名稱
????
MOVE?icon_cancel???TO?ls_toolbar-icon.???????????????????"圖標
????
MOVE?'刪除選中行'???TO?ls_toolbar-quickinfo.??????????????"鼠標停留時的提示信息
????
MOVE?'?'???????????TO?ls_toolbar-disabled.???????????????"可用
????
APPEND?ls_toolbar??TO?e_object->mt_toolbar.
??
ENDMETHOD.????????????????????"toolbar


??
METHOD?handle_cell_click.

????
"獲取單擊字段
????
DATA:?l_msg??????TYPE?string,
??????????l_wa_click?
LIKE?LINE?OF?g_it_show,
??????????l_row??????
TYPE?string,
??????????l_field????
TYPE?string.


????l_row??????
=?es_row_no-row_id.???????????????"選中行
????l_field????
=?e_column_id.????????????????????"選中的字段

????
READ?TABLE?g_it_show?INTO?l_wa_click?INDEX?es_row_no-row_id.

????
IF?sy-subrc?=?0.
??????
"得到所單擊值
??????
CONCATENATE?'您選中第'?l_row??'行,字段為:'?l_field??',選中值為'?l_wa_click-carrid?INTO?l_msg.
??????
MESSAGE?l_msg?TYPE?'I'.
????
ENDIF.
??
ENDMETHOD.????????????????????"handle_cell_click


??
METHOD?handle_double_click.
????
"獲取單擊字段
????
DATA:?l_msg??????TYPE?string,
??????????l_wa_click?
LIKE?LINE?OF?g_it_show,
??????????l_row??????
TYPE?string,
??????????l_field????
TYPE?string.

????l_field??????
=?e_column-fieldname.???????????????"選中行
????l_row????????
=?es_row_no-row_id.?????????????????"選中的字段

????
READ?TABLE?g_it_show?INTO?l_wa_click?INDEX?es_row_no-row_id?.

????
IF?sy-subrc?=?0.
??????
"得到所單擊值
??????
CONCATENATE?'您選中第'?l_row??'行,字段為:'?l_field??',選中值為:'??INTO?l_msg.

??????
CASE?l_field.
????????
WHEN?'CONNID'.
??????????
CONCATENATE?l_msg?l_wa_click-connid?INTO?l_msg.
??????????
MESSAGE?l_msg?TYPE?'I'.
????????
WHEN?'FLDATE'.
??????????
CONCATENATE?l_msg?l_wa_click-fldate?INTO?l_msg.
??????????
MESSAGE?l_msg?TYPE?'I'.
??????
ENDCASE.

????
ENDIF.
??
ENDMETHOD.????????????????????"handle_DOUBLE_CLICK

??
METHOD?handle_onf1.


??
ENDMETHOD.????????????????????"handle_ONF1

*&---------------------------------------------------------------------------&*
*&????????????????????????????????????????????????????????????????????????????*
*&??????HANDLE_USER_COMMAND???????????????????????????????????????????????????*
*&---------------------------------------------------------------------------&*
??
METHOD?handle_user_command.

????
REFRESH:lt_cols,??lt_rows.

????
CALL?METHOD?g_alv_grid->get_selected_rows
??????
IMPORTING
????????et_index_rows?
=?lt_rows.

????
CALL?METHOD?g_alv_grid->get_selected_columns
??????
IMPORTING
????????et_index_columns?
=?lt_cols.
????
CALL?METHOD?cl_gui_cfw=>flush.


????
CASE??e_ucomm.
??????
WHEN?'SEL_ALL'.
????????
LOOP?AT?g_it_show?INTO?g_wa_show.
??????????g_wa_show
-checkbox?=?'X'.
??????????
MODIFY?g_it_show??FROM?g_wa_show.
????????
ENDLOOP.
??????
WHEN?'CAN_ALL'.
????????
LOOP?AT?g_it_show?INTO?g_wa_show.
??????????g_wa_show
-checkbox?=?'?'.
??????????
MODIFY?g_it_show??FROM?g_wa_show.
????????
ENDLOOP.

??????
WHEN?'DELETE'.
????????
LOOP?AT?g_it_show?INTO?g_wa_show?WHERE?checkbox?IS?NOT?INITIAL.
??????????
DELETE?TABLE?g_it_show?FROM?g_wa_show.
????????
ENDLOOP.
??????
WHEN?OTHERS.
????
ENDCASE.


????
CALL?METHOD?cl_gui_cfw=>set_new_ok_code
??????
EXPORTING
????????new_code?
=?'RELOAD'.
??
ENDMETHOD.????????????????????"HANDLE_USER_COMMAND
ENDCLASS.?"ALV_EVENT_RECEIVER



關于刪除標準按鈕,我也debug的





然后可以根據功能碼或者quickinfo刪除






轉載于:https://www.cnblogs.com/senlinmu110/p/3802135.html

總結

以上是生活随笔為你收集整理的OOnbsp;ALV常用功能完整简例(热键单击…的全部內容,希望文章能夠幫你解決所遇到的問題。

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