动 态 显 示 或 隐 藏 TABLECONTROL 中 的 列 .
大家首先想到的可能是这样去写代码:
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'GR1'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
“等于0时,隐藏,等于1时,显示
ENDIF.
ENDLOOP.
说明: 这样的代码只对表格外的屏幕字段起到隐藏或显示的作用, 对表格内的
不起作用.
还可能是这样写:
DATA COL_NAME
type SCXTAB_COLUMN.
FIELD-SYMBOLS
FIELD-SYMBOLS
TYPE STANDARD TABLE.
FIELD-SYMBOLS TYPE I.
TYPE CXTAB_CONTROL.
ASSIGN (P_TC_NAME) TO .
“P_TC_NAME屏幕表格的名称
LOOP AT -COLS INTO COL_NAME WHERE SCREEN-GROUP1 = 'GR2'.
IF P_DISPLAY = '' .
“根据条件
COL_NAME-SCREEN-ACTIVE = 0. “等于0时,隐藏,等
于1时,显示
COL_NAME-SCREEN-INPUT = 0.
“等于0时,不能编辑, 等于1时可
以编辑
ELSEIF P_CHANGE = 'X'.
COL_NAME-SCREEN-ACTIVE = 1.
COL_NAME-SCREEN-INPUT = 1.
ENDIF.
MODIFY -COLS FROM COL_NAME.
ENDLOOP.
说明: 以上的代码对表格中的字段能否编辑可以起作用, 但是否隐藏不起作用.
只是当 ACTIVE = 0 时, 不显示数据罢了.
经研究, 以下的代码可以实现表格控件 TABLECONTROL 列的动态显示
在 PBO 模块中:
DATA: dynpdef
type c.
data: begin of current_data occurs 100.
include structure tcview.
data: end of current_data.
call 'AB_GET_CX_DATA'
TABLECONTROL 的屏幕变式
field 'YWMMR087'
id 'PROGRAM'
id 'CXNAME'
id 'DYNPRODEF' field dynpdef
id 'TCVIEWTAB' field current_data[]
field 'TAB_SCR200'
"获取
"程序名称
"TABLECONTROL 控件名称
"内表里有屏幕字段的相关信
息如是否隐藏等
id 'DYNPRONR'
field sy-dynnr.
CURRENT_DATA-TCINVISIBL = 'X'.
"将这个设为 'X',即为隐藏
MODIFY CURRENT_DATA TRANSPORTING TCINVISIBL
TCFIELDNAM = 'TABPO-MMSQN' "想要隐藏掉的屏幕表格内的字段名
WHERE
OR
TCFIELDNAM = 'TABPO-LINEN'.
call 'AB_SET_CX_DATA'
"重新设置变式
"程序名称
field 'TAB_SCR200' "TABLECONTROL 控件名称
field 'YWMMR087'
id 'PROGRAM'
id 'CXNAME'
id 'DYNPRODEF' field dynpdef
id 'TCVIEWTAB' field current_data[]
id 'DYNPRONR'
field sy-dynnr.