【ABAP系列】SAP ABAP OOALV 動態設置單元格可否編輯


公眾號: 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.按實際情況配合修改數據事件使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM