文章目录
概述
OO ALV,是指通过面向对象(object-Oriented)的方式实现的ALV输出
基本使用原理:
- 通过界面调用,在界面的Customer Control控件中,输出ALV
CLASS ALV优势:
- 使用面向对象的编程方式
- 使用容器,可以在一个界面中指定位置进行ALV的输出
设置fieldcat
- 定义:
内表:LVC_T_FCAT
结构:LVC_S_FCAT - 执行ALV输出前,对fieldcat表单进行赋值
- 调用ALV输出方法时,传值给IT_FIELDCATALOG
以下是fieldcat
字段的作用总结表格:
字段名 | 描述 |
---|---|
COL_POS | 指定列的位置 |
FIELDNAME | 定义字段的名称 |
COLTEXT | 设置列的文本描述 |
KEY | 指定字段是否为关键字段 |
EDIT | 指示字段是否可编辑 |
OUTPUTLEN | 设置字段的输出长度 |
F4AVAILABL | 指定字段是否可用F4帮助 |
CHECKBOX | 指示字段是否为复选框 |
EMPHASIZE | 设置字段是否需要突出显示(高亮) |
设置layout
- 定义:
结构:LVC_S_LAYO - 执行ALV输出前,对layout结构进行赋值
- 调用ALV输出方法时,传值给IS_LAYOUT
字段名 | 描述 | 值 |
---|---|---|
CWIDTH_OPT | 最优化宽度 | SPACE, ‘X’ |
GRID_TITLE | 标题,在网格和工具条之间 | 最长70个字符 |
NO_TOOLBAR | 隐藏工具条 | SPACE, ‘X’ |
NO_VGRIDLN | 隐藏垂直线 | SPACE, ‘X’ |
SEL_MODE | 选择模式 | SPACE, ‘A’, ‘B’, ‘C’, ‘D’ |
CTAB_FNAME | 带有复杂单元格颜色编码的字段名称 | 最长30个字符 |
INFO_FNAME | 带有简单行彩色代码的字段名称 | 最长30个字符 |
ZEBRA | 可选行颜色,如果设置了,出现了间隔色带 | SPACE, ‘X’ |
STYLEFNAME | 字段格式 | - |
颜色设置
颜色值
颜色值的设置:C+X(颜色:1~7)X(是否加重:1/0)X(是否反色1/0)
以列为单位
在FIELDCAT中给EMPHASIZE字段赋值
效果
以行为单位
- 在内表中增加一个字段,类型为CHAR,至少长度为4,例COLOR
* 根据需要修改结构体
TYPES: BEGIN OF GTY_STUDENT.
INCLUDE STRUCTURE ZSTUDENT_JSM_01.
TYPES: COLOR TYPE CHAR4,
* COLOR TYPE LVC_T_SCOL,
END OF GTY_STUDENT.
- 给向输出内表获取数据时,给COLOR字段赋值
FORM GRM_GET_DATA .
SELECT *
FROM ZSTUDENT_JSM_01
INTO CORRESPONDING FIELDS OF TABLE GTY_STU
WHERE ZCODE IN S_ID.
LOOP AT GTY_STU INTO GW_STU.
* 单元格颜色设置
IF GW_STU-SEX IS INITIAL.
GW_STU-COLOR = 'C610'.
ENDIF.
MODIFY GTY_STU FROM GW_STU.
ENDLOOP.
ENDFORM.
- 设置LAYOUT,给INFO_FNAME字段赋值颜色字段名称,例COLOR
效果
以单元格为单位
- 在内表中增加一个字段,类型为LVC_T_SCOL,例COLOR
* 根据需要修改结构体
TYPES: BEGIN OF GTY_STUDENT.
INCLUDE STRUCTURE ZSTUDENT_JSM_01.
TYPES: COLOR TYPE LVC_T_SCOL,
END OF GTY_STUDENT.
- 在向输出内表取数据时,通过结构给COLOR字段内表赋值
FORM GRM_GET_DATA .
DATA LS_SCOL LIKE LINE OF GW_STU-COLOR.
SELECT *
FROM ZSTUDENT_JSM_01
INTO CORRESPONDING FIELDS OF TABLE GTY_STU
WHERE ZCODE IN S_ID.
LOOP AT GTY_STU INTO GW_STU.
* 单元格颜色设置
IF GW_STU-SEX IS INITIAL.
LS_SCOL-FNAME = 'SEX'.
LS_SCOL-COLOR-COL = '3'.
APPEND LS_SCOL TO GW_STU-COLOR.
ENDIF.
MODIFY GTY_STU FROM GW_STU.
ENDLOOP.
ENDFORM.
- 设置LAYOUT,给CTAB_FNAME字段赋值颜色字段名称,例COLOR
效果
可修改属性设置
以表单为单位
- 设置LAYOUT-EDIT,为X,表示可修改
效果
以列为单位
- 设置FIELDCAT-EDIT字段,为X,表示列可修改
- 在字段设置中指定了学生姓名字段的编辑状态为可编辑状态
效果
以单元格为单位
1.在内表中增加一个字段,类型为LVC_T_STYL,例CELLSTL
* 根据需要修改结构体
TYPES: BEGIN OF GTY_STUDENT.
INCLUDE STRUCTURE ZSTUDENT_JSM_01.
TYPES: COLOR TYPE CHAR4,
CELLSTL TYPE LVC_T_STYL,
END OF GTY_STUDENT.
2.在需要设置修改属性的位置,通过结构给CELLSTL字段内表赋值
- FIELDNAME,需要设置属性的字段名
- STYLE,可修改属性:
不可修改:CL_GU_ALV_GRID=>MC_STYLE_DISABLED
可修改:CL_GUI_ALV_GRID=>MC_STYLE_ENABLED
FORM GRM_GET_DATA .
DATA LS_STYL TYPE LVC_S_STYL.
SELECT *
FROM ZSTUDENT_JSM_01
INTO CORRESPONDING FIELDS OF TABLE GTY_STU
WHERE ZCODE IN S_ID.
LOOP AT GTY_STU INTO GW_STU.
* 单元格颜色设置
* IF GW_STU-SEX IS INITIAL.
* GW_STU-COLOR = 'C610'.
* ENDIF.
* 单元格可修改设置
IF GW_STU-SEX IS INITIAL.
LS_STYL-FIELDNAME = 'SEX'.
LS_STYL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED."ready for input
APPEND LS_STYL TO GW_STU-CELLSTL .
ENDIF.
MODIFY GTY_STU FROM GW_STU.
ENDLOOP.
ENDFORM.
3.设置LAYOUT,给STYLEFNAME字段赋值修改属性的字段名,例CELLSTL
以上步骤做完后还需要检查ALV表格初始化后是否有调用set_ready_for_input这个方法:
set_ready_for_input:用于控制ALV网格的输入状态。
i_ready_for_input:
1:表示将ALV设置为可输入状态,用户可以在表格中进行编辑、修改等操作。
0:表示将ALV设置为只读状态,用户无法编辑表格中的数据。
CALL METHOD G_GRID_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GW_LAYOUT_ALV
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE_ALV
I_SAVE = 'A'
IS_VARIANT = LW_VARIANT
CHANGING
IT_FIELDCATALOG = GT_FIELDCAT_ALV
IT_OUTTAB = GTY_STU[].
CALL METHOD G_GRID_ALV->SET_READY_FOR_INPUT
EXPORTING
I_READY_FOR_INPUT = 1.
效果
4.特别的,如果将某一列中部分字段设置为可修改状态,一般通过以下方式完成:
- 在FIELDCAT中,设置该列属性为可修改
- 在表单赋值时,将不应为可修改状态的字段,设置为不可修改