1. 方法"set_table_for_first_display"的参数说明
_BUFFER_ACTIVE 如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是
相同的字段目录.既然这样,那么字段目录会被放到一个特殊的缓存里,
这样加速了ALV的显示
I_STRUCTURE_NAME 输出数据参考的数据字典的结构名,例如\'SFLIGHT\'.如果指定了这个参数,字段
目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值.
IS_VARIANT 决定布局显示的变式
I_SAVE 决定用户是否可以保存变式:
\'X\' 只能保存全局变式
\'U\' 只能保存特定变式
\'A\' 都可以保存
SPACE 不可以保存变式
I_DEFAULT 决定用户是否可以定义默认的布局:
\'X\' 可以定义默认布局,这个参数是默认的
SPACE 不可以定义默认布局
IS_LAYOUT 布局参数,传递布局控制的一些信息
IS_PRINT 后台打印属性的参数
IT_SPECIAL_GROUPS 如果在字段目录中,一些字段通过SP_GROUP被分组在一起.我们就必须为这些
组传递一个组的文本内表进去
IT_TOOLBAR_EXCLUDING 需要隐藏的标准的按钮的内表
IT_HYPERLINK 为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,
HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接
IT_ALV_GRAPHICS 比较复杂,没有用过,意思好象是可以在图表中显示ALV.
IT_OUTTAB 输出数据存放的内表,数据都是存放在这个内表里
IT_FIELDCATALOG 字段目录
IT_SORT 排序的标准
IT_FILTER 过滤的标准
2. 结构LVC_S_FCAT参数说明
1.字段目录 [Field catalog]
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等.
常用的控制字段如下:(下面的示例将说明这些字段的使用,参考STRUCTURE LVC_S_FCAT)
2 ROW_POS ALV 控制: 输出行 (内部使用)
3 COL_POS ALV 控制: 输出列 列的位置,第几列,例如1,2,…..
4 FIELDNAME ALV 控制: 内部表字段的字段名称 字段名称
5 TABNAME LVC 标签名称 表名,如果是内表,是1
6 CURRENCY ALV 控制: 货币单位
7 CFIELDNAME ALV 控制: 参考的当前单位的字段名称
8 QUANTITY ALV 控制: 计量单位
9 QFIELDNAME ALV 控制: 参考计量单位的字段名称
10 IFIELDNAME ALV 控制: 内部表字段的字段名称
11 ROUND ALV 控制: ROUND 值
12 EXPONENT ALV 控制:流动表示的指数
13 KEY ALV 控制: 关键字段 关键字段,前面变蓝色
14 KEY_SEL ALV 控制: 可以被隐藏的关键列 可以被隐藏的关键列
15 ICON ALV 控制: 作为图标输出 此列作为图标输出
16 SYMBOL ALV 控制: 输出作为符号
17 CHECKBOX ALV 控制: 作为复选框输出 复选框输出
18 JUST ALV 控制: 对齐 对齐方式:
\'R\': right justified
\'L\': left justified
\'C\': centered
19 LZERO ALV 控制: 输出前导零 X\'
20 NO_SIGN ALV 控制:输出抑制符号 X\',不输出符号
21 NO_ZERO ALV 控制: 为输出隐藏零 X\',隐藏0
22 NO_CONVEXT ALV 控制: 不考虑输出的转换退出
23 EDIT_MASK ALV 控制: 为输出编辑掩码 格式
24 EMPHASIZE ALV 控制: 带有颜色的高亮列 列的颜色
25 FIX_COLUMN ALV 控制: 固定列
26 DO_SUM ALV 控制: 总计列值 X\',合计
ALV_GRID介绍二(2)
27 NO_SUM ALV 控制: 没有总计列值 X\' ,没有合计
28 NO_OUT ALV 控制: 列没有输出 X\' ,隐藏此列
29 TECH ALV 控制: 技术字段 X\'.也是隐藏,但是有点不一样
30 OUTPUTLEN ALV 控制: 列的字符宽度 输出的长度
31 CONVEXIT 转换例程
32 SELTEXT ALV 控制: 对话功能的列标识符
33 TOOLTIP ALV 控制: 列抬头的工具提示
34 ROLLNAME ALV 控制: F1 帮助的数据元素
35 DATATYPE ABAP 字典中的数据类型 ABAP 字典中的数据类型
36 INTTYPE ABAP 数据类型(C,D,N,...) ABAP 数据类型(C,D,N,...)
37 INTLEN 以字节计的内部长度 内容的长度
38 LOWERCASE 允许/不允许小写字母 X\' 允许大小写
39 REPTEXT 标题
40 HIER_LEVEL ALV 控制: 内部使用
41 REPREP ALV 控制: 价值是补充/补充接口的选择标准
42 DOMNAME 定义域名
43 SP_GROUP 组代码
44 HOTSPOT ALV 控制: 单击敏感 X\',下面出现下划线,响应单击
45 DFIELDNAME ALV 控制: 数据库中列组的字段名称
46 COL_ID ALV 控制: 列 ID
47 F4AVAILABL 字段有输入帮助吗 X\'.此列有搜索帮助
48 AUTO_VALUE ALV 控制: 自动复制值
49 CHECKTABLE 表名
50 VALEXI 固定值存在
51 WEB_FIELD ALV 控制: 内部表字段的字段名称
52 HREF_HNDL 自然数 热点连接的句柄
53 STYLE ALV 控制: 样式 下面有例子会介绍,比如PUSHBUTTION
54 STYLE2 ALV 控制: 样式
55 STYLE3 ALV 控制: 样式
56 STYLE4 ALV 控制: 样式
57 DRDN_HNDL 自然数 下拉的句柄
58 DRDN_FIELD ALV 控制: 内部表字段的字段名称 下拉的字段
59 NO_MERGING 字符字段长度 1 相同的值不合并
60 H_FTYPE ALV 树控制: 功能类型 (总计,平均,最大.最小, ...)
61 COL_OPT 可选列优化的条目
62 NO_INIT_CH 字符字段长度 1
63 DRDN_ALIAS 字符字段长度 1
64 REF_FIELD ALV 控制: 内部表字段的参考字段名称
65 REF_TABLE ALV 控制: 内部表字段的参考表名称
66 TXT_FIELD ALV 控制: 内部表字段的字段名称
67 ROUNDFIELD ALV 控制: 带有 ROUND 说明的字段名称
68 DECIMALS_O ALV 控制: 输出小数位的编号
69 DECMLFIELD ALV 控制: 带有 DECIMALS 说明的字段名称
70 DD_OUTLEN ALV 控制: 输出字符长度
71 DECIMALS 小数点后的位数 设置小数的位数
72 COLTEXT ALV 控制: 列标题 列标题
73 SCRTEXT_L 长字段标签
74 SCRTEXT_M 中字段标签
75 SCRTEXT_S 短字段标签
76 COLDDICTXT ALV 控制: 确定 DDIC 文本参考
77 SELDDICTXT ALV 控制: 确定 DDIC 文本参考
78 TIPDDICTXT ALV 控制: 确定 DDIC 文本参考
79 EDIT ALV 控制: 准备输入 输出状态.\'X\'可输入
80 TECH_COL ALV 控制: 内部使用
81 TECH_FORM ALV 控制: 内部使用
82 TECH_COMP ALV 控制: 内部使用
83 HIER_CPOS ALV 控制: 层次列位置
84 H_COL_KEY 树控制: 列名称/项目名称
85 H_SELECT 标识是否可以选择树控制中的列
86 DD_ROLL 数据元素 (语义域)
87 DRAGDROPID ALV 控制: 拖&放处理拖放对象
88 MAC 字符字段长度 1
89 INDX_FIELD 自然数
90 INDX_CFIEL 自然数
91 INDX_QFIEL 自然数
92 INDX_IFIEL 自然数
93 INDX_ROUND 自然数
94 INDX_DECML 自然数
95 GET_STYLE 字符字段长度 1
96 MARK 字符字段长度 1
3. 结构LVC_S_LAYO参数说明(ALV 控制: 布局结构)
布局是用来控制整个ALV的一个布局,比如ALV的标题,是否可编辑,行颜色,列颜色。参照ALV的控制结构[LVC_S_LAYO],以后的例子我将详细介绍如何设置行颜色和列颜色.
详细的结构说明
字段名 描述 Value range
CWIDTH_OPT 最优化宽度 SPACE, \'X\'
SMALLTITLE 小标题,如果设置了这个字段,
则标题与列标题大小一样 SPACE, \'X\'
GRID_TITLE 标题,在网格和工具条之间 最长70个字符
NO_HEADERS 如果被设置,列标题隐藏 SPACE, \'X\'
NO_HGRIDLN 隐藏水平线 SPACE, \'X\'
NO_MERGING 禁用单元格合并 SPACE, \'X\'
NO_ROWMARK 如果被设置,选择列在选择模式
为D和A的时候隐藏 SPACE, \'X\'
NO_TOOLBAR 隐藏工具条 SPACE, \'X\'
NO_VGRIDLN 隐藏垂直线 SPACE, \'X\'
SEL_MODE 选择模式 SPACE, \'A\', \'B\', \'C\', \'D\'
SPACE 等同于B 参考B 默认设置
\'A\' 行和列的选择,无法选择单元格 多行,多列 用户可以使用最左边的选择按钮来选择多行
\'B\' 单选,不可以多选行,不可以多选单元格 多行,多列
\'C\' 多选,可以多选行,不可以多选单元格 多行,多列
\'D\' 单元格的选择,可以多选单元格 多行,多列,任何单元格多选 用户可以使用最左边的选择按钮来选择多行
EXCP_CONDS 合计例外 SPACE, \'X\'
EXCP_FNAME 字段名称带有例外编码 最长30个字符
EXCP_LED 例外作为 LED SPACE, \'X\'
EXCP_ROLLN 例外文档的数据元素 SPACE, \'X\'
CTAB_FNAME 带有复杂单元格颜色编码的字段名称 最长30个字符
INFO_FNAME 带有简单行彩色代码的字段名称 最长30个字符
ZEBRA 可选行颜色,如果设置了,出现了间隔色带 SPACE, \'X\'
NO_TOTLINE 没有总计 SPACE, \'X\'
NUMC_TOTAL 可以对NUMC字段进行合计 SPACE, \'X\'
TOTALS_BEF 总计输出在第一行,小计在新的值之前 SPACE, \'X\'
STYLEFNAME 设置单元格,比如PUSHBUTTON 最长30个字符
4. ALV的一些功能
功能一:在第一次显示以后,修改字段目录和布局.
在运行的时候,很有可能需要在显示之后,需要设置一个新的布局或者字段目录.有下面这些方法去实现.
字段目录 : get_frontend_fieldcatalog
set_frontend_fieldcatalog
布局: get_frontend_layout
set_frontend_layout
使用这些方法,你在执行的任何时候,可以获取这些内容,然后修改他们.
DATA ls_fcat TYPE lvc_s_fcat .
DATA lt_fcat TYPE lvc_t_fcat .
DATA ls_layout TYPE lvc_s_layo .
CALL METHOD gr_alvgrid->get_frontend_fieldcatalog
IMPORTING
et_fieldcatalog = lt_fcat[] .
LOOP AT lt_fcat INTO ls_fcat .
IF ls_fcat-fieldname = \'PAYMENTSUM\' .
ls_fcat-no_out = space .
MODIFY lt_fcat FROM ls_fcat .
ENDIF .
ENDLOOP .
CALL METHOD gr_alvgrid->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = lt_fcat[] .
CALL METHOD gr_alvgrid->get_frontend_layout
IMPORTING
es_layout = ls_layout .
ls_layout-grid_title = \'Flights (with Payment Sums)\' .
CALL METHOD gr_alvgrid->set_frontend_layout
EXPORTING
is_layout = ls_layout .
功能二:设置排序条件
有时候我们需要使用到数据的排序.这个可以通过填充参考结构LVC_T_SORT创建的内表来实现,这个内表中包含了排序的标准.可以传递给set_table_for_first_display这个方法的IT_SORT参数来初始化一个排序.
FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .
DATA ls_sort TYPE lvc_s_sort .
ls_sort-spos = \'1\' .
ls_sort-fieldname = \'CARRID\' .
ls_sort-up = \'X\' . "A to Z
ls_sort-down = space .
APPEND ls_sort TO pt_sort .
ls_sort-spos = \'2\' .
ls_sort-fieldname = \'SEATSOCC\' .
ls_sort-up = space .
ls_sort-down = \'X\' . "Z to A
APPEND ls_sort TO pt_sort .
ENDFORM. " prepare_sort_table
这有2点特别的说明:
1.如果这边排序的字段名,不存在于字段目录中,那将出现DUMP.
2.排序以后,垂直的网格中,如果出现相同的内容,就会合并,如果要避免,请在布局中设置"no_merging"为"X" .
可以通过使用方法“get_sort_criteria” 和“set_sort_criteria”来获取和设置排序的标准.
功能三:设置过滤(和排序类似)
ALV的标准按钮中已经有过滤的功能,我们也可以在初始显示的时候就设置过滤条件.我们需要把过滤条件填充到参考表类型"LVC_T_FILT"创建的内表中.过滤条件是类似一个RANGES结构的.然后把这个内表传递给方法"SET_TABLE_FOR_FIRST_DISPLAY"中的参数"IT_FILTER"
FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt .
DATA ls_filt TYPE lvc_s_filt .
ls_filt-fieldname = \'FLDATE\' .
ls_filt-sign = \'E\' .
ls_filt-option = \'BT\' .
ls_filt-low = \'20030101\' .
ls_filt-high = \'20031231\' .
APPEND ls_filt TO pt_filt .
ENDFORM. " preparefiltertable
我们可以使用"get_filter_criteria" 和"set_filter_criteria"来获取过滤条件和设置过滤条件.
注意:
1.如果你设置了ALV是可编辑的,可能会覆盖你在布局中选择方式的设置的.
2.设置了选择方式以后,我们可以使用很多方法来获取用户的选择.比如"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID","GET_SELECTED_ROWS","GET_SELECTED_COLUMNS"
3.在执行PAI以后,用户所选择的单元格,行或者列可能丢失.你可以在PBO中,使用对应的SET方法来恢复这些选择.