話不多說,直接上代碼,復制黏貼既可用!!!!!!!
雙擊某一行就會新增一行可維護空行!!!!!!!
TYPES:BEGIN OF ty_ekko, ebeln TYPE ekko-ebeln, verkf TYPE ekko-verkf, sel TYPE c, "用來標識行選擇的字段 F_STYLE TYPE LVC_T_STYL, END OF ty_ekko. DATA:it_ekko TYPE STANDARD TABLE OF ty_ekko, wa_ekko TYPE ty_ekko. DATA:lt_fieldcat TYPE lvc_t_fcat, wa_fieldcat LIKE LINE OF lt_fieldcat, wa_layout TYPE lvc_s_layo. CONSTANTS: gco_callback_user_command TYPE slis_formname VALUE 'FRM_USER_COMMAND', gco_callback_status TYPE slis_formname VALUE 'FRM_USER_STATUS'. START-OF-SELECTION. SELECT ebeln verkf INTO CORRESPONDING FIELDS OF TABLE it_ekko FROM ekko UP TO 10 ROWS. APPEND INITIAL LINE TO it_ekko. PERFORM frm_set_catalog. PERFORM frm_loop_itdata. * wa_layout-zebra = 'X'. * wa_layout-box_fname = 'SEL'. "指定行選擇字段 wa_layout-cwidth_opt = 'X'. wa_layout-stylefname = 'F_STYLE'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid is_layout_lvc = wa_layout it_fieldcat_lvc = lt_fieldcat i_callback_pf_status_set = gco_callback_status i_callback_user_command = gco_callback_user_command TABLES t_outtab = it_ekko[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc = 0. ENDIF. *&---------------------------------------------------------------------* *& Form FRM_SET_PF_STATUS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_user_status USING i_it_extab TYPE slis_t_extab. * SET PF-STATUS '*******' . ENDFORM. " FRM_SET_PF_STATUS FORM frm_user_command USING i_ucomm TYPE sy-ucomm i_wa_selfield TYPE slis_selfield. CASE i_ucomm. WHEN '&IC1'. "Double click * if click on PO field, jump to me23n * IF i_wa_selfield-fieldname = 'EBELN'. * SET PARAMETER ID 'BES' FIELD i_wa_selfield-value. * CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. * ENDIF. PERFORM frm_loop_itdata . APPEND INITIAL LINE TO it_ekko. i_wa_selfield-refresh = 'X'. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SET_CATALOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_set_catalog . DEFINE mac_fieldcat. clear wa_fieldcat. wa_fieldcat-fieldname = &1. wa_fieldcat-reptext = &2. wa_fieldcat-tabname = 'IT_EKKO'. wa_fieldcat-outputlen = &3. "設置輸出列寬 wa_fieldcat-edit = &4. APPEND wa_fieldcat TO lt_fieldcat. END-OF-DEFINITION. clear wa_fieldcat. wa_fieldcat-fieldname = 'SEL'. wa_fieldcat-reptext = '選擇框'. wa_fieldcat-tabname = 'IT_EKKO'. wa_fieldcat-edit = 'X'. wa_fieldcat-checkbox = 'X'. wa_fieldcat-outputlen = 5. "設置輸出列寬 APPEND wa_fieldcat TO lt_fieldcat. mac_fieldcat 'EBELN' '采購單號' 10 'X'. mac_fieldcat 'VERKF' '銷售員' 10 'X'. ENDFORM. *&---------------------------------------------------------------------* *& Form frm_loop_itdata *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_loop_itdata . DATA stylelin TYPE lvc_s_styl. LOOP AT it_ekko INTO wa_ekko. IF wa_ekko-ebeln IS NOT INITIAL. CLEAR :wa_ekko-f_style[]. CLEAR stylelin. stylelin-fieldname = 'EBELN'. " 需要編輯的列名 stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 設置為不可編輯狀態 APPEND stylelin TO wa_ekko-f_style. CLEAR STYLELIN. stylelin-fieldname = 'VERKF'. stylelin-style = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND stylelin TO wa_ekko-f_style. MODIFY it_ekko FROM wa_ekko. ENDIF. ENDLOOP. ENDFORM.
有時候會報如下異常:

解決辦法如下:
問題:使用LVC_S_STYL參數賦值修改內表LVC_T_STYL表字段時,報ABAP系統錯誤如下: 'Error inserting into or changing a sorted table';具體代碼如下: IS_STYLE-FIELDNAME = 'ZWEIZHI1'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI2'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. ................ IS_STYLE-FIELDNAME = 'ZWEIZHI9'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI10'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI11'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. 解決:ALV編輯單元格狀態或控制單元格顯示等可使用參數LVC_S_STYL, 參照LVC_S_STYL定義工作區,參照LVC_T_STYL定義一個表字段,放在顯示內表中, 並把該表字段在layout參數中激活STYLEFNAME,即可實現。 對於表字段的具體賦值,CALL FUNCTION和CALL METHOD不同ALV方式的實現方法也不相同。 但是在表字段賦值時,一定要注意FIELDNAME字段的排序方式,按照1 10 11...2 20 21...3... 依次順序排序,如果append進內表的字段排序順序不對的話,就會報SORT表的排序錯誤。 更改后代碼為: IS_STYLE-FIELDNAME = 'ZWEIZHI1'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI10'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI11'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. IS_STYLE-FIELDNAME = 'ZWEIZHI2'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES. ................ IS_STYLE-FIELDNAME = 'ZWEIZHI9'. IS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. APPEND IS_STYLE TO TAB_G_ZMRM-CELLSTYLES.
