程序目录
屏幕结构
MODULE INIT_ALV OUTPUT.
IF GS_ALV IS INITIAL.
PERFORM CREATE_ALV. "实例化容器和ALV植入容器中
PERFORM BUILD_FIELDCAT. "定义展示字段
PERFORM BUILD_LAYOUT. "定义布局
PERFORM BUILD_EXCLUDE. "定义隐藏按钮
PERFORM SET_HANDLER. "注册事件
PERFORM BUILD_ALV. "展示ALV
ELSE.
PERFORM REFESH_ALV. "刷新ALV
ENDIF.
ENDMODULE.
-界面中增加Customer Control控件,定义名称为:OOALVSCREEN
DATA:GS_ALV TYPE REF TO CL_GUI_ALV_GRID, "ALV类
GS_PARENT TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "容器类
GT_FIELDCAT TYPE LVC_T_FCAT, "列格式内表
GS_FIELDCAT TYPE LVC_S_FCAT, "列格式-结构
GS_LAYOUT TYPE LVC_S_LAYO."输出格式
*实例化--实例化容器
CREATE OBJECT GS_PARENT
EXPORTING
CONTAINER_NAME = 'OOALVSCREEN'.
*将ALV植入到容器中
CREATE OBJECT GS_ALV
EXPORTING
I_PARENT = GS_PARENT.
创建子例程
FORM ADD_FIELDCAT_ALV USING P_FIELDNAME
P_SELTEXT
P_COL
P_LEN.
CLEAR GS_FIELDCAT.
GS_FIELDCAT-FIELDNAME = P_FIELDNAME."字段名
GS_FIELDCAT-SCRTEXT_M = P_SELTEXT."描述
GS_FIELDCAT-COL_POS = P_COL."输出列
GS_FIELDCAT-OUTPUTLEN = P_LEN."输出长度
APPEND GS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.
赋值
CLEAR GT_FIELDCAT[].
PERFORM ADD_FIELDCAT_ALV USING: 'VBELN' '销售凭证' '1' '10' ,
'LCBH' '流程编号' '1' '10'
.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'BOX'.
CALL METHOD GS_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT "布局
CHANGING
IT_OUTTAB = GTY_ZOA01T_0001 "内表数据
IT_FIELDCATALOG = GT_FIELDCAT "字段列数据
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
使用此方法可以刷新输出ALV的数据,不必浪费性能再次创建ALV的一些操作。
GS_STABLE TYPE LVC_S_STBL. "ALV 控制:刷新稳定性
GS_STABLE-ROW = 'X'.
GS_STABLE-COL = 'X'.
CALL METHOD GS_ALV->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = GS_STABLE
EXCEPTIONS
FINISHED = 1
OTHERS = 2.
GS_FIELDCAT-EMPHASIZE = 'C100'."设置列颜色
TYPES:BEGIN OF TY_ZOA01T_0001 ,
BOX TYPE C LENGTH 1,
COLOR TYPE C LENGTH 4.
INCLUDE STRUCTURE GS_ZOA01T_0001.
TYPES END OF TY_ZOA01T_0001.
LOOP AT GTY_ZOA01T_0001 INTO GSY_ZOA01T_0001.
GSY_ZOA01T_0001-COLOR = 'C101'.
MODIFY GTY_ZOA01T_0001 FROM GSY_ZOA01T_0001.
ENDLOOP.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'BOX'.
GS_LAYOUT-INFO_fNAME = 'color'."行颜色
TYPES:BEGIN OF TY_ZOA01T_0001 ,
BOX TYPE C LENGTH 1,
COLOR TYPE C LENGTH 4,
DY_COLOR TYPE LVC_T_SCOL , "
INCLUDE STRUCTURE GS_ZOA01T_0001.
TYPES END OF TY_ZOA01T_0001.
"设置单元格颜色
* LS_CELLCOLOR-FNAME = 'LCBH'.
* LS_CELLCOLOR-COLOR-COL = '6'.
* LS_CELLCOLOR-COLOR-INT = '0'.
* LS_CELLCOLOR-COLOR-INV = '0'.
* APPEND LS_CELLCOLOR TO GSY_ZOA01T_0001-DY_COLOR.
GS_LAYOUT-CTAB_FNAME = 'DY_COLOR'.
TYPES:BEGIN OF TY_ZOA01T_0001 ,
BOX TYPE C LENGTH 1,
COLOR TYPE C LENGTH 4,
CELLSTL TYPE LVC_T_STYL. "设置是否可编辑
INCLUDE STRUCTURE GS_ZOA01T_0001.
TYPES END OF TY_ZOA01T_0001.
DATA:LS_CELLSTL TYPE LVC_S_STYL.
LS_CELLSTL-FIELDNAME = 'LCBH'.
LS_CELLSTL-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
APPEND LS_CELLSTL TO GSY_ZOA01T_0001-CELLSTL.
MODIFY GTY_ZOA01T_0001 FROM GSY_ZOA01T_0001.
GS_LAYOUT-STYLEFNAME = 'CELLSTL'.
1、在需要设置修改属性的位置,通过结构给CELLSTL字段内表赋值 FIELDNAME,需要设置属性的字段名STYLE 可修改属性 不可修改:CL_GUI_ALV_GRID=>MC_STYLE_DISABLED 可修改:CL_GUI_ALV_GRID=>MC_STYLE_ENALBED 设置LAYOUT,给STYLEFNAME字段赋值修改属性的字段名,例CELLSTL 2、如果将某一列中部分字段设置为可修改状态,一般通过以下方式完成 在FIELDCAT中,设置该列属性为可修改 在表单赋值时,将不应为可修改状态的字段,设置为不可修改 不是将需要修改的单元格设置为可修改,防止可修改属性设置与静态属性设置冲突
子例程
FORM APPEND_ALV_EXCLUDE_FUNCTIONS TABLES PT_EXCLUDE TYPE UI_FUNCTIONS
USING P_VALUE TYPE UI_FUNC.
APPEND P_VALUE TO PT_EXCLUDE.
ENDFORM.
REFRESH G_TOLLBAR.
PERFORM APPEND_ALV_EXCLUDE_FUNCTIONS TABLES G_TOLLBAR
USING:CL_GUI_ALV_GRID=>MC_FC_DETAIL .
CALL METHOD GS_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = GS_LAYOUT
IT_TOOLBAR_EXCLUDING = G_TOLLBAR
CHANGING
IT_OUTTAB = GTY_ZOA01T_0001
IT_FIELDCATALOG = GT_FIELDCAT
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
创建本地类
CLASS LCL_APP_COMPT DEFINITION.
PUBLIC SECTION.
METHODS:HANDLE_TOOLBAR FOR EVENT TOOLBAR
OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT
E_INTERACTIVE.
ENDCLASS.
CLASS LCL_APP_COMPT IMPLEMENTATION.
METHOD:HANDLE_TOOLBAR.
PERFORM MODIFY_TOOLBAR USING E_OBJECT '' .
ENDMETHOD.
ENDCLASS.
FORM MODIFY_TOOLBAR USING P_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
P_INTERACTIVE.
DATA:LS_TOOLBAR TYPE STB_BUTTON.
CLEAR LS_TOOLBAR.
LS_TOOLBAR-BUTN_TYPE = 3.
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'download'.
LS_TOOLBAR-ICON = 'ICON_WORKLOAD'.
LS_TOOLBAR-TEXT = 'download'.
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.
ENDFORM.
声明变量
CLASS LCL_APP_COMPT DEFINITION DEFERRED."用DEFINITION DEFERRED是让程序提前知道类lcl_event,避免编译错误
DATA:EVENT_RECEIVER TYPE REF TO LCL_APP_COMPT.
实例化和注册事件
CREATE OBJECT EVENT_RECEIVER.
SET HANDLER EVENT_RECEIVER->HANDLE_TOOLBAR FOR GS_ALV.
METHODS:HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
METHOD:HANDLE_USER_COMMAND.
PERFORM FM_USER_COMMANS USING E_UCOMM.
ENDMETHOD.
FORM FM_USER_COMMANS USING P_UCOMM.
CASE P_UCOMM.
WHEN 'download'.
MESSAGE '点击download' TYPE 'S'.
ENDCASE.
ENDFORM.
"注册事件
SET HANDLER EVENT_RECEIVER->HANDLE_USER_COMMAND FOR GS_ALV.
METHODS:HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID.
METHOD:HANDLE_HOTSPOT_CLICK .
PERFORM HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID.
ENDMETHOD.
FORM HOTSPOT_CLICK USING P_E_ROW_ID
P_E_COLUMN_ID.
DATA:LV_VALUE(50).
CALL METHOD GS_ALV->GET_CURRENT_CELL
IMPORTING
E_VALUE = LV_VALUE.
MESSAGE LV_VALUE TYPE 'S'.
ENDFORM.
SET HANDLER EVENT_RECEIVER->HANDLE_HOTSPOT_CLICK FOR GS_ALV.
CALL METHOD GS_ALV->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED."单元格更改触发
SET HANDLER EVENT_RECEIVER->HANDLER_DATA_CHANGER FOR GS_ALV.