ABAP分享五 ALV修改單元格並將修改數據更新到數據表中示例1


*下面的代碼是在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.  

 


免責聲明!

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



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