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
注意:
颜色设置中有优先级顺序,他们是单元格--->行--->列.