ALV GRID

ALV Grid Edit 기능

ALV GRID 를 EDIT 하는 3가지 방법에 대해 알아보겠습니다.

 

1. ALV GRID 전체 수정

2. 필드별 수정 (열)

3. 셀별 수정 = 라인별 수정(행) 

★ 조회/수정 모드 변경 메소드


 

 


 

0. 전제 조건(변수)

  DATA: GS_LAYO TYPE LVC_S_LAYO,

          GS_FCAT  TYPE LVC_S_FCAT.

 

  DATA: GRF_GRID TYPE CL_GUI_ALV_GRID.

 

  DATA:  BEGIN OF GT_DISP OCCURS 0.

           INCLUDE STRUCTURE MARA.

  DATA:  CELLTAB TYPE LVC_T_STYL,

        END OF GT_DISP.

 

  * SET TABLE FOR FIRST DISPLAY 사용하여 화면 출력

  

 

1. ALV GRID 전체 수정

 

   GS_LAYO-EDIT = 'X'.

 

 *2,3 번 사용할때는 GS_LAYO-EDIT = ' ' . 이어야한다.

 

 

2.  필드별 수정 (열)

 

   EDIT 사용할 필드의 EDIT 설정.

   EX) GS_FCAT-FIELDNAME = 'MATNR'.

        GS_FCAT-EDIT          = 'X'.

        APPEND GS_FCAT TO GT_FCAT.

 

 

 

3. 셀별 수정 = 라인별 수정(행) 

 

   **참조 프로그램 : BCALV_EDIT_02

 

  1) 디스플레이 테이블에 LVC_T_STYL 선언

      DATA:  BEGIN OF GT_DISP OCCURS 0.

           INCLUDE STRUCTURE MARA.

      DATA: CELLTAB TYPE LVC_T_STYL,   "테이블 형식임

             END OF GT_DISP.

 

  2) 테이블 데이터등에 따라서 셀별로 EDIT 활성/비활성 설정  

    예를 들어 GT_DISP 의 ERDAT(생성일) 가 오늘날짜보다 전일때,

    MATNR / MTART를 EDIT 활성화

 

    DATA: LS_CELLTAB TYPE LVC_S_STYL.

    LOOP AT GT_DISP.

 

      IF GT_DISP-ERDAT < SY-DATLO.

 

       LS_CELLTAB-FIELDNAME = 'MATNR'.

       LS_CELLTAB-STYLE        = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED.   *EDIT활성화

       INSERT LS_CELLTAB INTO TABLE GT_DISP-CELLTAB.

 

       CLEAR: LS_CELLTAB.

       LS_CELLTAB-FIELDNAME = 'MTART'.

       LS_CELLTAB-STYLE        = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. 

       INSERT LS_CELLTAB INTO TABLE GT_DISP-CELLTAB.

 

      ELSE.

       LS_CELLTAB-FIELDNAME = 'MATNR'.

       LS_CELLTAB-STYLE        = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.   *EDIT비활성화

        INSERT LS_CELLTAB INTO TABLE GT_DISP-CELLTAB.

 

       CLEAR: LS_CELLTAB.

       LS_CELLTAB-FIELDNAME = 'MTART'.

       LS_CELLTAB-STYLE        = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED.  

       INSERT LS_CELLTAB INTO TABLE GT_DISP-CELLTAB.

     ENDIF.

 

    MODIFY GT_DISP.

    ENDLOOP.

 

     " 라인별 수정은 따로 있지않고 수정할 라인의 필드 전부를 활성화 시키면 된다

     " 활성/비활성화 필드 설정시 GT_FCAT을 사용하여 쉽게 추가할 수 있다.

 

  3)  레이아웃에서 스타일 테이블 설정 ( GT_DISP의 LVC_T_STYL 필드 )

 

      GS_LAYO-STYLEFNAME = 'CELLTAB'.   *무조건 대문자

 

 

  4)  필드 카탈로그의 EDIT 활성화

    활성화/ 비활성화 적용한 필드의 GS_FCAT-EDIT 적용

 

     EX) GS_FCAT-FIELDNAME = 'MATNR'.

        GS_FCAT-EDIT          = 'X'.

        APPEND GS_FCAT TO GT_FCAT.

    

    *3번이 적용되지않으면 2번에서 EDIT 활성을 해도 EDIT 적용되지않는다.

 

 

★ 조회/수정 모드 변경 메소드

    

  이렇게 EDIT 설정 3가지 방법에 대해 알아봤습니다.

  1,2,3 의 방법으로 EDIT 설정을 하면 프로그램 실행시 바로 수정모드로 화면이 출력됩니다.  

  하지만 다수의 프로그램들은 조회/수정 버튼을 사용하여

  프로그램 처음조회시에는 조회모드로, 수정버튼을 클릭시에 수정 모드로 변하게 개발되어있습니다.

  

  프로그램 처음 조회시에는 아래와 같이 조회모드로 출력하고, 

 

  CALL METHOD GRF_GRID->SET_READY_FOR_INPUT

   EXPORTING

     I_READY_FOR_INPUT    = 0 : 조회모드 (EDIT 비활성화)

 

 수정버튼을 클릭했을때 아래와 같이 수정모드로 변경해주면 됩니다.

 

  CALL METHOD GRF_GRID->SET_READY_FOR_INPUT

   EXPORTING

     I_READY_FOR_INPUT    = 1 : 수정모드 (EDIT 활성화)