ALV实现前,编辑该字段的fieldcat-edit =  'X'  可编辑。

在USER_COMMAND中进行如下操作:

LOOP AT lt_out INTO wa_out.
  MOVE-CORRESPONDING wa_out TO ls_mod.
  APPEND ls_mod TO lt_old.
  CLEAR: wa_out,ls_mod.
ENDLOOP.    "lt_old ALV显示前的数据

FORM user_command USING ucomm     LIKE sy-ucomm
                        selfield  TYPE slis_selfield.

  DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
  DATA: lt_rows TYPE lvc_t_row WITH HEADER LINE.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.

  CALL METHOD lr_grid->check_changed_data.
  selfield-refresh = 'X'.     "更新修改后的数据至内表

  LOOP AT lt_out INTO wa_out.
    MOVE-CORRESPONDING wa_out TO ls_mod.
    APPEND ls_mod TO lt_new.
    CLEAR: wa_out, ls_mod.
  ENDLOOP.  "lt_new  修改后的数据

  CASE ucomm.
    WHEN '&DATA_SAVE'."修改后点击保存时
      "ALV所修改的行
      CALL FUNCTION 'CTVB_COMPARE_TABLES'  "改函数可比较两个表的增删改
        EXPORTING
          table_old  = lt_old
          table_new  = lt_new
          key_length = 10
        IMPORTING
          table_mod  = lt_mod.
     
      LOOP AT lt_mod INTO ls_mod.
        PERFORM convert_input USING ls_mod-matnr.
        MODIFY lt_mod FROM ls_mod.
        CLEAR:ls_mod.
      ENDLOOP.

      MODIFY zmmt1001 FROM TABLE lt_mod.
      IF sy-subrc = 0.
        COMMIT WORK.
        MESSAGE '保存成功!' TYPE 'S'.
      ELSE.
        ROLLBACK WORK.
        MESSAGE '保存失败!' TYPE 'E'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐