公眾號:
matinal
本文作者:
matinal
前言部分
大家可以關注我的公眾號,公眾號里的排版更好,閱讀更舒適。
正文部分
對於OOALV有些列允許客戶輸入,但是當用戶輸入之后,或者ALV展示之前要判斷是否滿足一定的條件,如果滿足,那么就要單獨設置某一行或者幾行的這個字段不可以編輯或可以編輯,效果如果所示:
實現步驟
1.在展示的內表或內表類型中添加字段
CELLTAB TYPE LVC_T_STYL.
例如:
TYPES : BEGIN OF T_SC, BUKRS LIKE ANLZ-BUKRS, ANLN1 LIKE ANLA-ANLN1, "模具編號 ANLN2 LIKE ANLA-ANLN2, CELLTAB TYPE LVC_T_STYL, END OF T_SC.
2.在layout設置中添加代碼
XXX_LAYOUT-STYLEFNAME =’CELLTAB’.
3.實現控制編輯屬性的代碼
FORM FRM_INIT_STYLE_TAB . DATA: LT_SFLIGHT TYPE TABLE OF SFLIGHT WITH HEADER LINE, LT_CELLTAB TYPE LVC_T_STYL, LS_CELLTAB TYPE LVC_S_STYL, L_INDEX TYPE I. LOOP AT IT_TAB INTO WA_TAB. CLEAR : WA_TAB-CELLTAB. "不為空會報錯 IF WA_TAB-CELLTAB IS INITIAL. L_INDEX = SY-TABIX. REFRESH LT_CELLTAB. LS_CELLTAB-FIELDNAME = 'ZCWCZD'. IF WA_TAB-ZCWCZI IS NOT INITIAL AND WA_TAB-ZCXCZI IS INITIAL. LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. ELSE. LS_CELLTAB-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. ENDIF. INSERT LS_CELLTAB INTO TABLE LT_CELLTAB. INSERT LINES OF LT_CELLTAB INTO TABLE WA_TAB-CELLTAB. MODIFY IT_TAB FROM WA_TAB INDEX L_INDEX. ENDIF. ENDLOOP. ENDFORM. " FRM_INIT_STYLE_TAB
4.在需要重新顯示的地方調用代碼
在每一個你需要重新判斷單元格是否可以編輯的地方調用,如:
MODULE DISPLAY_FINANCIAL_DISPOSAL OUTPUT. "設置可編輯字段 PERFORM FRM_INIT_STYLE_TAB. "展示avl PERFORM DISPLAY_FINANCIAL_DISPOSAL. ENDMODULE. " DISPLAY_FINANCIAL_DISPOSAL OUTPUT
5.按實際情況配合修改數據事件使用