如何在ABAP 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.
"第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行只有項目不能輸入 在開發具體程序中,可以把相應的控制格子"的"操作放在取數之后來進行,loop每條數據 查詢其中某條的信息,后面的alv"屬性一定要設置X_LAYOUT-STYLEFNAME = 'STYLE'.
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.
總結
以上是生活随笔為你收集整理的如何在ABAP ALV中具体的控制每个格子中的编辑属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ALV报表中设置可修改字段
- 下一篇: 关于SAP 对生产订单的月度结算