控制ALV单元格可编辑
REPORT ZALV_EDIT.
TYPE-POOLS: SLIS.
*- Fieldcatalog
DATA: IT_FIELDCAT TYPE LVC_T_FCAT.
DATA: X_FIELDCAT TYPE LVC_S_FCAT.
DATA: X_LAYOUT TYPE LVC_S_LAYO.
?
"第1步:用操作具體單元的是否可編輯的內表和工作區
?
DATA: LS_EDIT TYPE LVC_S_STYL,
??????LT_EDIT TYPE LVC_T_STYL,
????gr_alvgrid?TYPE REF TO cl_gui_alv_grid .
"第2步:在內表定義添加字段,用于控制具體行的具體單元是否可編輯
DATA: BEGIN OF IT_VBAP OCCURS 0,
??VBELN LIKE VBAP-VBELN,
??POSNR LIKE VBAP-POSNR,
??STYLE TYPE LVC_T_STYL,?"FOR DISABLE
END OF IT_VBAP.
DATA: LS_OUTTAB LIKE LINE OF IT_VBAP.
SELECT VBELN??POSNR
??UP TO 100 ROWS
??INTO CORRESPONDING FIELDS OF TABLE IT_VBAP
FROM VBAP.
?
DATA:L_POS TYPE I VALUE 1.
CLEAR: L_POS.
L_POS = L_POS + 1.
X_FIELDCAT-SELTEXT = 'VBELN'.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '10'.
x_fieldcat-ref_field = 'VBELN'.
x_fieldcat-ref_table = 'VBAK'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
?
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
X_FIELDCAT-SELTEXT = 'POSNR'.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = L_POS.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-OUTPUTLEN = '5'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_POS = L_POS + 1.
?
"第3步:設置第六行兩個單元都不能輸入
SY-TABIX = 6.
LS_EDIT-FIELDNAME = 'VBELN'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 =?SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 10.
INSERT LS_EDIT INTO TABLE LT_EDIT.
?
LS_EDIT-FIELDNAME = 'POSNR'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 6.
INSERT LS_EDIT INTO TABLE LT_EDIT.
?
INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-STYLE.
?
"第4步:將控制數據寫到內表
?
MODIFY IT_VBAP INDEX SY-TABIX FROM LS_OUTTAB TRANSPORTING STYLE .
?
?
?
"設置第10行只有項目不能輸入
?
clear LS_OUTTAB.
refresh LT_EDIT.
LS_EDIT-FIELDNAME = 'POSNR'.
LS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.
LS_EDIT-STYLE2 = SPACE.
LS_EDIT-STYLE3 = SPACE.
LS_EDIT-STYLE4 = SPACE.
LS_EDIT-MAXLEN = 6.
INSERT LS_EDIT INTO TABLE LT_EDIT.
?
INSERT LINES OF LT_EDIT INTO TABLE LS_OUTTAB-STYLE.
?
SY-TABIX = 10.
?
?
"將控制數據寫到內表
?
MODIFY IT_VBAP INDEX SY-TABIX FROM LS_OUTTAB TRANSPORTING STYLE .
?
"第5步:設置控制字段
X_LAYOUT-STYLEFNAME?= 'STYLE'.
?
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
??EXPORTING
????I_CALLBACK_PROGRAM = SY-REPID
????IS_LAYOUT_LVC??????= X_LAYOUT
????IT_FIELDCAT_LVC????= IT_FIELDCAT
??TABLES
????T_OUTTAB???????????= IT_VBAP[]
??EXCEPTIONS
????PROGRAM_ERROR??????= 1
????OTHERS?????????????= 2.
IF SY-SUBRC NE 0.
??MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
??WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
源自:http://www.cnblogs.com/VerySky/articles/2323550.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的控制ALV单元格可编辑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可编辑单元格ALV
- 下一篇: ALV 刷新实现(自动)