ALV中下拉列表列的實現
有時候我們可以把一些欄位設定為下拉,比如一些型別,一些欄位的值是比較固定的一些值,如性別等。設定為下拉,和設定超級連結是類似的,也是使用了一個內表存放了控制代碼和對應的值,這個表型別為”LVC_T_DROP”.不過傳遞給 ALV 的方式有點區別.超級連結是通過方法”SET_TABLE_FOR_FIRST_DISPLAY”
的引數來傳遞的,而下拉的內表傳遞需要使用方法”SET_DROP_DOWN_TABLE”. (對OOALV來說)如果我們希望把這個列都設定為下拉,那麼我們可以在欄位目錄中,把控制欄位”DRDN_HNDL”指向對應的下拉內表的控制代碼就可以了。
首先定義控制代碼內表和對控制代碼內表操作的工作區:
*定義下拉表
DATA:gt_drp TYPE lvc_t_drop.
DATA:gs_drp TYPE lvc_s_drop.
*向下拉表中填充資料,handle值相同的為一組下拉。
FORM prepare_drilldown_values.
gs_drp-handle = ‘1′ .
gs_drp-value = ‘JFK-12′ .
APPEND gs_drp TO gt_drp .
gs_drp-handle = ‘1′ .
gs_drp-value = ‘JSF-44′ .
APPEND gs_drp TO gt_drp .
gs_drp-handle = ‘1′ .
gs_drp-value = ‘KMDA-53′ .
APPEND gs_drp TO gt_drp .
gs_drp-handle = ‘1′ .
gs_drp-value = ‘SS3O/N’ .
APPEND gs_drp TO gt_drp .
ENDFORM. ”prepare_drilldown_values
*定義欄位目錄中,對DRDN_HNDL進行設定,設定為1的話,該欄位的下拉組為gt_drp中handle為1的組:
form fc.
…..
‘S’ ‘TABNAME’ ‘GT_MARA’ ,
” ’SCRTEXT_M’ ‘DRP’ ,
” ’DRDN_HNDL’ ‘1′,
” ’EDIT’ ’X’,
‘E’ ‘FIELDNAME’ ‘DRP’ .
…..
endform.
然後在呼叫alv之前:
CALL METHOD gs_alv->set_drop_down_table
EXPORTING
it_drop_down = gt_drp.
CALL METHOD gs_alv->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = g_toolbar
it_hyperlink = gt_hype
CHANGING
it_outtab = gt_mara[]
it_fieldcatalog = gt_fieldcat.
如果是某個單元格設定為下拉,那我們就需要在資料顯示的內表中增加一個控制代碼欄位(如果是有多個不同的欄位需要設定下拉,可以增加多個欄位),同時得在欄位目錄裡設定”DRDN_FIELD”