ALV GRID CONTROL實例
ALV GRID實例的定義,參照CL_GUI_ALV_GRID類
data ALV_GRID1 type refto cl_gui_alv_grid.
ALV GRID繼承結構:

ALV GRID相關的幾個控制結構
1.字段目錄 [Field catalog]
字段目錄是用來控制ALV顯示的網格中每個字段的屬性的,比如字段的順序,對齊方式,可編輯狀態,顏色,等等.
常用的控制字段如下:(下面的示例將說明這些字段的使用,參考STRUCTURE LVC_S_FCAT)
2.布局控制[layout]
布局是用來控制整個ALV的一個布局,比如ALV的標題,是否可編輯,行顏色,列顏色.
參照ALV的控制結構[LVC_S_LAYO],以后的例子我將詳細介紹如何設置行顏色和列顏色.
詳細的結構說明
3.打印和排序,過濾控制
打印的參數控制請參考結構 [LVC_S_PRNT]
排序的參數控制請參考結構[LVC_S_SORT]
過濾的參數控制請參考結構[LVC_S_FILT]
這里不再一一解釋,進入中文版本,里面應該也有解釋的,雖然一些不是很清楚.
五.編寫簡單的ALV程序.
首先這里就不詳細介紹DIALOG的用法了.
OO的ALV GRID必須存在於一個容器當中,就是FUNCTION的ALV,其實也是一樣的,底層也是使用CL_GUI_ALV_GRID這個類的.
首先ALV的顯示需要有幾個先決條件.
1,字段目錄,這個是必須的,如果沒有這個參數,參考一個數據字典也是可以的,就是參數I_STRUCTURE_NAME.
2.存放數據的內表,最好內表的結構和字段目錄是一致的,否則可能會出現一些無法預知的錯誤,當然你說我非要不一樣,那也不一定會出現錯誤.我建議是最好一樣的.
這2個是必須的,布局的話,應該是可以不設置的,使用默認的就可以了.
第一步:創建個SCREEN,在屏幕上創建個容器,Container.定義變量.
DATA: WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID.
*--- 存放字段目錄的內表
DATA gt_fieldcat TYPE lvc_t_fcat . *--- 布局結構
DATA gs_layout TYPE lvc_s_layo .
*----聲明需要顯示的內表(以SFLIGHT為例)
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
DATA END OF gt_list .
第二步: 創建ALV這個對象,它的父組件是那個容器.
在PBO中寫入如下代碼:
PROCESS BEFOREOUTPUT . MODULE display_alv .
創建DISPLAY_ALV的MODULE后,寫下如下代碼:
MODULE display_alv OUTPUT . PERFORM display_alv . ENDMODULE .
在FORM DISPLAY_ALV中,判斷ALV實例是否存在,如果不存在,則創建:
IF WCL_ALV IS INITIAL .
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = 'ALV_CON'.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
*-----准備獲取字段目錄
PERFORM prepare_field_catalog CHANGINGgt_fieldcat .
*-----設置布局
PERFORM prepare_layout CHANGING gs_layout .
*-----顯示ALV
CALL METHODgr_alvgrid->set_table_for_first_display EXPORTING
* I_BUFFER_ACTIVE =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
is_layout = gs_layout
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
CHANGING
it_outtab = gt_list[]
it_fieldcatalog = gt_fieldcat
* IT_SORT =
* IT_FILTER =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4 .
ELSE .
*----刷新ALV
CALL METHODgr_alvgrid->refresh_table_display *
EXPORTING * IS_STABLE = *
I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2 .
IF sy-subrc <> 0. *--異常處理 ENDIF.
ENDIF .
下面是一段示例代碼:
FORM handle_data_changed USINGir_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA: ls_mod_cell TYPE lvc_s_modi,
Lv_value TYPE lvc_value.
SORT ir_data_changed->mt_mod_cellsBY row_id.
LOOP ATir_data_changed->mt_mod_cells
INTO ls_mod_cell
WHERE fieldname = 'SEATSMAX'.
CALLMETHOD ir_data_changed->get_cell_value
EXPORTING i_row_id = ls_mod_cell-row_id
I_fieldname = 'CARRID'
IMPORTING e_value = lv_value.
IFlv_value = 'THY' AND ls_mod_cell-value > '500'.
CALL METHOD ir_data_changed->add_protocol_entry
EXPORTING
I_msgid = 'SU'
I_msgno = '000'
I_msgty = 'E'
I_msgv1 = 'This number can not exceed 500 for '
I_msgv2 = lv_value
I_msgv3 = 'The value is et to ''500'''
I_fieldname = ls_mod_cell-fieldname
I_row_id = ls_mod_cell-rowid.
CALL METHOD ir_data_changed->modify_cell
EXPORTING i_row_id = ls_mod_cell-row_id
I_fieldname = ls_mod_cell-fieldname
I_value = '500'.
ENDIF.
ENDLOOP.
ENDFORM.
附錄:ABAP顏色代碼
ABAP中的顏色代碼是由4位字都組成的
Cxyz
C:color的簡寫,顏色代碼均以C開頭
x:標准色代碼,SAP中一共有7個標准色
y:反轉顏色啟用/關閉 1/0
z:增強顏色啟用/關閉 1/0
注意:
顏色設置中有優先級順序,他們是單元格--->行--->列.

