*下面的代码是在alv字段中修改字段的内容,点击保存后就可以保存数据至数据表。

TABLES: spfli.

DATA:

     wa_fieldcat TYPE lvc_s_fcat ,  " 相当于工作区

     i_fieldcat  TYPE lvc_t_fcat ,  " 存放输出栏位名称的列表

     i_layout    TYPE lvc_s_layo .  " 负责整个ALV的全局属性

 DATA tab_spfli LIKE  TABLE OF spfli WITH HEADER LINE.  " 定义内表
 DATA wa_spfli TYPE spfli.

 DATA it_spfli LIKE STANDARD TABLE OF spfli.   " 定义内表
 DATA lt_spfli TYPE spfli.

 SELECT * FROM spfli
   INTO CORRESPONDING FIELDS OF TABLE tab_spfli.  "将数据表中的数据存入内表中

PERFORM getfield.
PERFORM is_layout.
DATA: l_user_command TYPE slis_formname VALUE 'USER_COMMAND'.  "定义返回事件
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'     "定义显示内表
  EXPORTING
    I_CALLBACK_PROGRAM                = sy-repid
    I_CALLBACK_USER_COMMAND           = l_user_command
    IS_LAYOUT_LVC                     = i_layout
    IT_FIELDCAT_LVC                   = i_fieldcat
    I_SAVE                            'A'
  TABLES
    t_outtab                          = tab_spfli
  EXCEPTIONS
    PROGRAM_ERROR                     1
    OTHERS                            2
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

 

FORM getfield.     "定义显示字段  
    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'CARRID'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '航线代码'.
    wa_fieldcat-fix_column 'X'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'CONNID'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '航班连接号'.
    wa_fieldcat-fix_column 'X'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'CITYFROM'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '起飞城市'.
    wa_fieldcat-edit      'X'.           "设置成可编辑状态
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'CITYTO'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '到达城市'.
    wa_fieldcat-edit      'X'.           "设置成可编辑状态
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'DERTIME'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '出发时间'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

    wa_fieldcat-col_pos   .
    wa_fieldcat-fieldname 'ARRTIME'.
    wa_fieldcat-just      'C'.
    wa_fieldcat-seltext '到达时间'.
    APPEND wa_fieldcat TO i_fieldcat.
    CLEAR wa_fieldcat.

ENDFORM.

FORM is_layout.     "定义ALV显示样式
   i_layout-ZEBRA 'X'.
   i_layout-CWIDTH_OPT 'X'.
ENDFORM.

FORM user_command USING r_ucomm LIKE sy-ucomm               "执行事件
                  rs_selfield TYPE slis_selfield.

  CASE r_ucomm .

    WHEN '&DATA_SAVE'.                  "当点击保存按钮时执行下面代码  


       SELECT * FROM spfli INTO TABLE  it_spfli  "tab_spfli 查找数据表中数据到内表 
       FOR ALL ENTRIES IN tab_spfli
       WHERE carrid = tab_spfli-carrid AND connid = tab_spfli-connid.


          LOOP AT it_spfli INTO lt_spfli.   "循环内表
            READ TABLE tab_spfli INTO wa_spfli  WITH KEY   "读取修改后的内表
              carrid = lt_spfli-carrid connid = lt_spfli-connid.
            IF sy-subrc 0.   "如果读取一致将修改后的内表字段的值赋值给新内表字段
              lt_spfli-cityfrom  = wa_spfli-cityfrom.
              lt_spfli-cityto    = wa_spfli-cityto.
              MODIFY it_spfli FROM lt_spfli.  "更新修改后的内表字段的值
            ENDIF.
            CLEAR lt_spfli.
            CLEAR wa_spfli.
          ENDLOOP.
          UPDATE spfli FROM TABLE it_spfli.  "根据更新后的内表更新数据表,将更新后的字段的值传入数据表中。
          IF sy-subrc 0.
            COMMIT WORK.
*            MESSAGE '保存成功' TYPE 'I'.
            MESSAGE '保存成功' TYPE 'I'.
          ELSE.
            ROLLBACK WORK.
          ENDIF.
        WHEN '2'.
        WHEN OTHERS.

  ENDCASE.
ENDFORM.  

 

posted on 2019-10-10 16:26  霜叶红花  阅读(3396)  评论(1编辑  收藏  举报