使用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.
顯示:
以上。