REUSE_ALV_GRID_DISPLAY_LVC-可編輯單元格


使用REUSE_ALV_GRID_DISPLAY_LVC顯示ALV時,如何將列、行或者具體的某個單元格設置成可編輯能輸入狀態?這個其實很簡單,下面一一講解:

1, 列可編輯

只要將catalog中的字段edit設置成‘X',整列就變成能輸入的了,LVC_S_FCAT-EDIT

代碼:

REPORT ztest_alv_lvc_edit.

TYPES:BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
      END OF gty_ekko.
DATA:git_ekko TYPE STANDARD TABLE OF gty_ekko.
DATA:git_fcat   TYPE lvc_t_fcat,
     gwa_fcat   LIKE LINE OF git_fcat,
     gwa_layout TYPE lvc_s_layo.
DATA:l_pos TYPE i VALUE 1.

START-OF-SELECTION.

  SELECT ebeln
         verkf
    INTO TABLE git_ekko
    FROM ekko
   UP TO 10 ROWS.

  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-col_pos = l_pos.
  gwa_fcat-edit = 'X'.  "設置列為可編輯狀態
  gwa_fcat-outputlen = '20'.
  APPEND gwa_fcat TO git_fcat.

  gwa_layout-zebra = 'X'.
  gwa_layout-sel_mode = 'A'.
  gwa_layout-cwidth_opt = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = gwa_layout
      it_fieldcat_lvc    = git_fcat
    TABLES
      t_outtab           = git_ekko[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc = 0.
*    BREAK-POINT.
  ENDIF.

運行結果:

2, 整個ALV可編輯

將layout中的EDIT字段賦值’X'(LVC_S_LAYO-EDIT),就可以將整個ALV設置成可輸入狀態。

還有一種比較笨的辦法就是將所有列都設置成可輸入。

代碼:

 gwa_layout-zebra = 'X'.
  gwa_layout-sel_mode = 'A'.
  gwa_layout-cwidth_opt = 'X'.
  gwa_layout-edit     = 'X'.       "將整個ALV設置成可編輯
  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           = git_ekko[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

3, 單元格可編輯

如果要讓單元格變成可輸入,需要在alv輸出內表中多定義一個保存單元格style的字段(類型:lvc_t_styl ),然后填入style屬性(可編輯或者是不可編輯),最后還要在layout-stylefname中指定style的字段名。

代碼如下:將EBELN設置成不可輸入。

TYPES:BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
        style TYPE lvc_t_styl,  "將該字段設置為保存編輯狀態的字段
      END OF gty_ekko.
  gwa_edit-fieldname = 'EBELN'.
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."設置為不可輸入
  INSERT gwa_edit INTO TABLE git_edit.
gwa_layout-stylefname = 'STYLE'. "指定保存編輯狀態的字段名

style屬性可以在類CL_GUI_ALV_GRID中可以找到:

MC_STYLE_DISABLED:禁止輸入

MC_STYLE_ENABLED:可編輯,可輸入。

需要注意的是:MC_STYLE_ENABLED輸入性不能單獨使用,一定在EDIT = 'X'(layout-edit 或者是catalog-edit)的場合下,才可以利用MC_STYLE_ENABLED進行不可編輯到編輯切換,也就是不設置edit = 'X',MC_STYLE_ENABLED是不起作用的。

完整代碼:

REPORT ztest_alv_lvc_edit.

TYPES:BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
        style TYPE lvc_t_styl,  "設置編輯狀態字段
      END OF gty_ekko.
DATA:git_ekko TYPE STANDARD TABLE OF gty_ekko,
     gwa_ekko TYPE gty_ekko.

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:gwa_edit TYPE lvc_s_styl,
     git_edit TYPE lvc_t_styl.

START-OF-SELECTION.

  SELECT ebeln
         verkf
    INTO CORRESPONDING FIELDS OF TABLE git_ekko
    FROM ekko
   UP TO 10 ROWS.

  gwa_edit-fieldname = 'VERKF'.
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled."設置為不可編輯
  INSERT gwa_edit INTO TABLE git_edit.

  INSERT LINES OF git_edit INTO TABLE gwa_ekko-style.
* 將除第三行的之外所有行的VERKF字段都設置成不能輸入
  DO 10 TIMES.
    IF sy-index <> 3.
      MODIFY git_ekko INDEX sy-index FROM gwa_ekko TRANSPORTING style.
    ENDIF.
  ENDDO.

  PERFORM frm_set_catalog.

  gwa_layout-zebra = 'X'.
  gwa_layout-sel_mode = 'A'.
  gwa_layout-cwidth_opt = 'X'.
  gwa_layout-edit     = 'X'.       "將整個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           = git_ekko[]
    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.

4, 行可編輯

類似於單元格可編輯,只要將一行之外的所有行都變成不可輸入,也就實現了行可編輯。邏輯如下:

1,通過layout-edit = ’X' 將整個行項目都變成可輸入

2,將某行之外的所有行style設置成 cl_gui_alv_grid=>mc_style_disabled.

代碼:

REPORT ztest_alv_lvc_edit.

TYPES:BEGIN OF gty_ekko,
        ebeln TYPE ekko-ebeln,
        verkf TYPE ekko-verkf,
        style TYPE lvc_t_styl,  "設置編輯狀態字段
      END OF gty_ekko.
DATA:git_ekko TYPE STANDARD TABLE OF gty_ekko,
     gwa_ekko TYPE gty_ekko.

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:gwa_edit TYPE lvc_s_styl,
     git_edit TYPE lvc_t_styl.

START-OF-SELECTION.

  SELECT ebeln
         verkf
    INTO CORRESPONDING FIELDS OF TABLE git_ekko
    FROM ekko
   UP TO 10 ROWS.

  gwa_edit-fieldname = 'EBELN'.
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT gwa_edit INTO TABLE git_edit.

   gwa_edit-fieldname = 'VERKF'.
  gwa_edit-style = cl_gui_alv_grid=>mc_style_disabled.
  INSERT gwa_edit INTO TABLE git_edit.

  INSERT LINES OF git_edit INTO TABLE gwa_ekko-style.
* 將除第三行之外的所有行都設置成不能輸入
  DO 10 TIMES.
    IF sy-index <> 3.
      MODIFY git_ekko INDEX sy-index FROM gwa_ekko TRANSPORTING style.
    ENDIF.
  ENDDO.

  PERFORM frm_set_catalog.

  gwa_layout-zebra = 'X'.
  gwa_layout-sel_mode = 'A'.
  gwa_layout-cwidth_opt = 'X'.
  gwa_layout-edit     = 'X'.       "將整個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           = git_ekko[]
    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-col_pos = l_pos.
  gwa_fcat-outputlen = '20'.
  APPEND gwa_fcat TO git_fcat.

ENDFORM.

顯示:

以上。


免責聲明!

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



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