ALV GRID学习笔记----Double Click事件
????? 首先大概講一下ALV GRID雙擊事件的實現原理:ALV GRID繼承自CL_GUI_ALV_GRID這個Class interface,而在CL_GUI_ALV_GRID這個class interface中已經定義了很多的Methods以及Events。例如,在ALV GRID中我們常用到的 SET_TABLE_FOR_FIRST_DISPLAY這個method就可以在CL_GUI_ALV_GRID的methods中找到。因此如果我們需要查看在ALV GRID中我們能夠使用哪些method或者那些Event,只需要在Repository Browser中選擇Class/Interfase然后輸入CL_GUI_ALV_GRID,就可以查看到所以已經定義好的menthod以及events等等。言歸正傳,在這次試驗中我們需要實現一個ALV Grid的Dobule Click事件,我們在CL_GUI_ALV_GRID的Events中可以找到一個"DOUBLE_CLICK"這樣的事件。而這個DOUBLE_CLICK都接收那些參數呢?雙擊DOUBLE_CLICK,然后在右邊的欄位中選中DOUBLE_CLICK時間,在左上方有一個Paremeters的按鈕,點擊進去以后我們看到有E_ROW、E_COLUMN,ES_ROW_NO這三個參數。OK,現在事件已經找到了我們接下來需要做的工作就是定義一個類去實現這個事件,并將該事件注冊到我們的ALV GRID中。下面將結合實際的例子來進行講述:
????? 一,在Screen中繪制一個Custom Control,并命名為ALV_GRID;在Process before output中定義 MODULE?STATUS_0100,在Process After Input中定義 MODULE?USER_COMMAND_0100??。
????? 二,在程序中定義一個名為 grid_event_receiver的CLASS。具體代碼如下:
??????????? ?
CLASS?grid_event_receiver?DEFINITION.
????????????? PUBLIC?SECTION.
???????????????? METHODS:
????????????????????? handler_Double_click
???????????????????????????FOR?EVENT?DOUBLE_CLICK?of?cl_gui_alv_grid
???????????????????????????IMPORTING?e_row?e_column,
?????????ENDCLASS.????????????????????"grid_event_rece?
????? 三,在程序中對grid_event_receiver這個CLASS進行具體實現。具體代碼如下:
????????????? ?
CLASS?grid_event_receiver?IMPLEMENTATION.
?????????????????? METHOD?handler_Double_click.
????????????????????? ?DATA:?ls_sflight?like?line?of?gt_sflight.
????????????????????? ?READ?TABLE?gt_sflight?INDEX?e_row-index?INTO?ls_sflight.
???? ????????????????? SELECT?*?from?sbook?INTO?TABLE?gt_sbook
??????????????????????? ???????????????????????????? WHERE?carrid??=?ls_sflight-carrid
????????????????????????????????????????????????????? and????connid??=?ls_sflight-connid
????????????????????????????????????????????????????? and????fldate??=?ls_sflight-fldate.
???????????????????????PERFORM?DETAIL_LIST.
??????????????????????
ENDMETHOD.?????????????????
"handler_Double_click?
????????????ENDCLASS.????????????????????"grid_event_receiver?IMPLEMENTATION?????????????????????????????????????????????????
通過以上的代碼,我們可以看到在handler_double_click事件中我們Dobule_Click事件中的Paremeter e_row(表示雙擊事件發生的該行)的index從gt_sflight?這個內表中讀取數據,然后再從sbook這個table中讀取數據,最后再執行DETAIL_LIST這個form。
????? 四,在程序中定義一些變量,代碼如下:
???????????????? ?
DATA:?custom_container?type?ref?to?cl_gui_custom_container,????????????? ?"custom_container:the container of grid1
?????????????????????????? grid1??type?ref?to?cl_gui_alv_grid,???????????????????????????????????????????? ? "The main?alv grid?to show the mail data
???????????????????????????grid2??type?ref?to?cl_gui_alv_grid,?????????????????????????????????????????????? "The Detail?alv grid to show the detail data
?????????????????????????? dialogbox_container?type?ref?to?cl_gui_dialogbox_container,???????? "dialogbox_container:The container of grid2
?????????????????????????? event_receiver?type?ref?to?grid_event_receiver,??????????????????????????? "event_receiver:Point to?grid_event_recerive
????? 五,在PBO的moudule中讀取數據并顯示在grid1并注冊Double_Click事件到grid1上。在? STATUS_0100這個module中首先要第四部中定義的變量進行實例話,然后調用ALV Grid的 SET_TABLE_FOR_FIRST_DISPLAY方法顯示數據,最后需要將前面定義的double click事件注冊到該grid上。具體代碼為:
?
?IF?custom_container?is?INITIAL.
????PERFORM?Get_DATA?TABLES?GT_OUTPUT[].??????"Get?data?from?table?and?fill?the?data?into?internal?table?GT_OUTPUT
????CREATE?OBJECT?custom_container????????????"Create?the?instance?of?custom_container
????????EXPORTING
??????????CONTAINER_NAME?=?'ALV_GRID'?????????"Set?the?Container_name?to?'ALV_GRID'(Define?in?Screen)
????????exceptions
??????????cntl_error?=?1
??????????cntl_system_error?=?2
??????????create_error?=?3
??????????lifetime_error?=?4
??????????lifetime_dynpro_dynpro_link?=?5.
????CREATE?OBJECT?grid1?EXPORTING?i_parent?=?custom_container.??"Create?the?instance?of?grid1?and?set?custom_container?as?grid1's?Container
????gs_layout-grid_title?=?'Flight'(100).
????gs_layout-excp_fname?=?g_lights_name.
????gs_layout-sel_mode?=?'A'.
????CALL?METHOD?grid1->SET_TABLE_FOR_FIRST_DISPLAY???????"Call?the?method?to?show?data
??????EXPORTING
????????I_STRUCTURE_NAME??????????????=?'SFLIGHT'
??????CHANGING
????????IT_OUTTAB?????????????????????=?GT_OUTPUT[]
*????EXCEPTIONS
*??????INVALID_PARAMETER_COMBINATION?=?1
*??????PROGRAM_ERROR?????????????????=?2
*??????TOO_MANY_LINES????????????????=?3
*??????others????????????????????????=?4.
????IF?SY-SUBRC?<>?0.
*???MESSAGE?ID?SY-MSGID?TYPE?SY-MSGTY?NUMBER?SY-MSGNO
*??????????????WITH?SY-MSGV1?SY-MSGV2?SY-MSGV3?SY-MSGV4.
????ENDIF.
????CREATE?OBJECT?event_receiver.???????????????????????"Create?the?instance?of?event_receiver
????set?HANDLER?event_receiver->handler_Double_click?FOR?grid1.???"register?the?double_click?event?to?grid1
??ENDIF.
???? 六,在PAI的module中處理其他一些代碼。
???? 通過以上一些步驟我們就可以實現ALV GRID的雙擊事件了。需要注意的是:在以上的代碼中我們沒有對Grid2以及dialogbox_container進行實例話。而對這兩者的實例化以及如何在grid2種顯示詳細數據放置在Dobule Click事件的實現過程中(對應前面代碼中的? PERFORM?DETAIL_LIST)。Detail_LIST中的具體代碼如下:
?
FORM?DETAIL_LIST?.
??CREATE?OBJECT?dialogbox_container?????????"Create?the?instance?of?dialogbox_container
?????EXPORTING
???????TOP??????=?100
???????LEFT?????=?150
???????WIDTH????=?800
???????HEIGHT???=?200
???????LIFETIME?=?cntl_lifetime_dynpro
???????.
??CREATE?OBJECT?grid2??????????????????????"Create?the?instance?of?grid2?and?set?dialogbox_container?as?its?container
???????EXPORTING?i_parent?=?dialogbox_container.
??CALL?METHOD?grid2->SET_TABLE_FOR_FIRST_DISPLAY???"call?the?method?to?show?the?data
????EXPORTING
??????I_STRUCTURE_NAME?=?'SBOOK'
????CHANGING
??????IT_OUTTAB????????=?gt_sbook.
ENDFORM.????????????????????"?DETAIL_LIST
????? 好了,在ALV GRID中如何實現雙擊事件就講述到這里。在下一篇中我將記錄一下如何以紅綠燈的形式在ALV GRID中顯示數據。
總結
以上是生活随笔為你收集整理的ALV GRID学习笔记----Double Click事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在vs2005中使用Com连接SAP系统
- 下一篇: ALV TREE学习笔记