ABAP ALV控件單元格編輯設置DEMO

原來一直沒用到這麼深,這2天開始關注這塊,基本上搞清楚了。

1、使用的ABAP ALV 控件是: REUSE_ALV_GRID_DISPLAY_LVC 。

 

2、DEMO程序運行後的效果,等於4700000005的PO,PO ITEM列的單元格時可以編輯的:

3、注意內存數據結構,這個清楚了,就很好理解是怎麼玩的。在數據表的每一行末,還有一個小表,這個表存放這一行中哪些字段可編輯,哪些不可編輯的信息(所以需要表數據)。程序工作起來,需要控制每一行末的這張EDIT小表,給它相應的數據,才能控制單元格的編輯狀態。

4、對於REUSE_ALV_GRID_DISPLAY_LVC函數,我目前只能打開一整列爲可編輯狀態,然後關閉不編輯的單元格。

全部DEMO的程序,如果你沒有PO數據,換一個有數據的client試:

REPORT ZALV2.

TYPES:BEGIN OF GS_TYPE,
        EBELN TYPE EKKO-EBELN,
        VERKF TYPE EKKO-VERKF,
        STYLE TYPE LVC_T_STYL,  "設置編輯狀態字段
      END OF GS_TYPE.

DATA:GT_TABLE TYPE STANDARD TABLE OF GS_TYPE,
     GS_TABLE TYPE GS_TYPE.


DATA:GIT_FCAT   TYPE LVC_T_FCAT,
     GWA_FCAT   LIKE LINE OF GIT_FCAT,
     GWA_LAYOUT TYPE LVC_S_LAYO,
     GWA_GLAY   TYPE LVC_S_GLAY.


DATA:GS_EDIT TYPE LVC_S_STYL,
     GT_EDIT TYPE LVC_T_STYL.


START-OF-SELECTION.

  SELECT EBELN
         VERKF
          INTO CORRESPONDING FIELDS OF TABLE GT_TABLE
          FROM EKKO
   UP TO 10 ROWS.



  GS_EDIT-FIELDNAME = 'VERKF'.
  GS_EDIT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."設置爲不可編輯
  INSERT GS_EDIT INTO TABLE GT_EDIT.



LOOP AT GT_TABLE INTO GS_TABLE.


    IF GS_TABLE-EBELN <> '4700000005'.

      GS_TABLE-STYLE = GT_EDIT.

    ENDIF.

    MODIFY GT_TABLE FROM GS_TABLE TRANSPORTING STYLE.

ENDLOOP.



  PERFORM FRM_SET_CATALOG.

  GWA_LAYOUT-ZEBRA = 'X'.
  GWA_LAYOUT-SEL_MODE = 'A'.
  GWA_LAYOUT-CWIDTH_OPT = 'X'.
  GWA_LAYOUT-EDIT     = ''.       "將整個ALV設置成可編輯
  GWA_LAYOUT-STYLEFNAME = 'STYLE'. "指定保存編輯狀態的字段名
  GWA_GLAY-EDT_CLL_CB = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      IS_LAYOUT_LVC      = GWA_LAYOUT   "參數
      IT_FIELDCAT_LVC    = GIT_FCAT    "參數表
*      I_GRID_SETTINGS    = GWA_GLAY
    TABLES
      T_OUTTAB           = GT_TABLE[]
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             = 2.
  IF SY-SUBRC = 0.

  ENDIF.
*&---------------------------------------------------------------------*
*&      FORM  FRM_SET_CATALOG
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*


FORM FRM_SET_CATALOG .

  DATA:L_POS TYPE I VALUE 1.
  CLEAR: L_POS.
  L_POS = L_POS + 1.
  GWA_FCAT-COLTEXT   = 'PO'.
  GWA_FCAT-SCRTEXT_L = 'PO'.
  GWA_FCAT-SCRTEXT_M = 'PO'.
  GWA_FCAT-SCRTEXT_S = 'PO'.
  GWA_FCAT-FIELDNAME = 'EBELN'.
  GWA_FCAT-COL_POS = L_POS.
  GWA_FCAT-OUTPUTLEN = '10'.
  APPEND GWA_FCAT TO GIT_FCAT.


  L_POS = L_POS + 1.
  GWA_FCAT-COLTEXT   = 'PO ITEM'.
  GWA_FCAT-SCRTEXT_L = 'PO ITEM'.
  GWA_FCAT-SCRTEXT_M = 'PO ITEM'.
  GWA_FCAT-SCRTEXT_S = 'PO ITEM'.
  GWA_FCAT-FIELDNAME = 'VERKF'.
  GWA_FCAT-EDIT    = 'X'. "將這列設置爲可編輯
  GWA_FCAT-COL_POS = L_POS.
  GWA_FCAT-OUTPUTLEN = '20'.
  APPEND GWA_FCAT TO GIT_FCAT.

ENDFORM.

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章