ALV:刷新单元格属性
需求:包装类型和包装箱型号在状态 01为可编辑,状态02不可编辑,点击提交后将将状态01改为02,且字段不可编辑,取消提交相反。
实现:
在ALV内表中增加字段参照LVC_T_STYL.
TYPES:BEGIN OF TY_CREATE.
INCLUDE STRUCTURE ZTMM305.
TYPES:BOX TYPE C.
TYPES:CELLSTYLE TYPE LVC_T_STYL.
TYPES:END OF TY_CREATE.
将ALV布局设置为可编辑,赋值ALV一般显示选项,对于其他不可编辑字段fieldcat-edit设置为空
GS_LAYOUT-EDIT = 'X'.
GS_LAYOUT-STYLEFNAME = 'CELLSTYLE'.
IF LS_FCAT-FIELDNAME <> 'LIFNR' OR LS_FCAT-FIELDNAME <> 'ZBZLX' OR LS_FCAT-FIELDNAME <> 'ZBZXXH'.
LS_FCAT-EDIT = ''.
ENDIF.
循环内表,给CELLSTYLE字段赋值
FORM FRM_EDITABLES .
DATA: GS_STYLE TYPE LVC_S_STYL,
GT_STYLE TYPE LVC_T_STYL.
LOOP AT GT_CREATE INTO GS_CREATE.
CLEAR:GS_STYLE.
REFRESH:GT_STYLE.
GS_STYLE-FIELDNAME = 'AUFNR'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
GS_STYLE-FIELDNAME = 'SERNR'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
GS_STYLE-FIELDNAME = 'MATNR'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
GS_STYLE-FIELDNAME = 'LIFNR'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
IF GS_CREATE-ZZT <> '01'.
GS_STYLE-FIELDNAME = 'ZBZLX'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
ENDIF.
IF GS_CREATE-ZZT <> '01'.
GS_STYLE-FIELDNAME = 'ZBZXXH'.
GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
INSERT GS_STYLE INTO TABLE GT_STYLE.
ENDIF.
GS_CREATE-CELLSTYLE = GT_STYLE.
MODIFY GT_CREATE FROM GS_CREATE.
ENDLOOP.
ENDFORM.
实现单元格可编辑功能
点击按钮功能后,刷新ALV
CASE OK_CODE.
WHEN 'QXTJ'. "取消提交
PERFORM FRM_QXTJ.
"获取ALV变化过后的布局参数
PERFORM FRM_EDITABLES.
CALL METHOD GRID1->GET_FRONTEND_LAYOUT
IMPORTING
ES_LAYOUT = GS_LAYOUT.
"重新回写自适应宽度
GS_LAYOUT-CWIDTH_OPT = 'X'.
CALL METHOD GRID1->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT.
GS_STABLE-ROW = 'X'.
GS_STABLE-COL = 'X'.
CALL METHOD GRID1->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = GS_STABLE.
WHEN OTHERS.
CALL METHOD GRID1->REFRESH_TABLE_DISPLAY.
ENDCASE.
效果图
修改前
提交后
后记:写这些东西只是为了让给自己做个记录。如果你看到了这篇博文希望能对你有那么一点帮助,关于里面的注解只是我自己的理解,不正确的地方,请指出。