1. 程式人生 > >ALV中下拉列表列的實現

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”