对于ALV中的可编辑字段,当输入的数据不满足某种条件时,我们需要将它恢复到修改前的数据,并刷新ALV。但是可编辑的字段刷新后仍然时修改后的数据,此处记录一种方法。

对于ALV中的可编辑字段,当输入的数据不满足某种条件时,我们需要将它恢复到修改前的数据,并刷新ALV。但是可编辑的字段刷新后仍然时修改后的数据,此处记录一种方法。

FORM DATA_CHANGED_METHOD USING pa_data_changed TYPE REF TO cl_alv_changed_data_protocol.

       DATA: it_data TYPE  lvc_t_modi,

             ls_data TYPE  lvc_t_modi.

       DATA: lt_alv LIKE TABLE OF gt_alv WITH HEADER LINE.

      

       CLEAR lt_alv[].

       lt_alv[] = gt_alv[]    “保存原表中的数据,用于后期恢复数据

      

       IF pa_data_changed IS NOT INITIAL.

              LT_DATA = pa_data_changed->MT_MOD_CELLS.

       ENDIF.

      

       IF lv_a > lv_b.  “(判断如果输入的数据不符合条件,则恢复修改前的数据)

              gt_alv[] = lt_alv[].

              LOOP AT LT_DATA INTO LS_DATA.

                     CLEAR: wa_alv.

                     READ TABLE lt_alv INTO wa_alv INDEX LS_DATA-ROW_ID.

                     CASE LS_DATA-FIELDNAME.

                            WHEN ‘ZNKXS’.   “内控系数  (此处为可编辑状态的字段)

                                   CALL METHOD pa_data_changed->MODIFY_CELL

                                          EXPORTING

                                                 I_ROW_ID   =  LS_DATA-ROW_ID

                                                 I_FIELDNAME  =  LS_DATA-FIELDNAME

                                                 I_VALUE  =  WA_ALV-ZNKXS.

                            WHEN OTHERS.

                     ENDCASE.

                     MODIFY  GT_ALV  FROM  wa_alv  INDEX  LS_DATA-ROW_ID.

                     CLEAR  LS_DATA.

              ENDLOOP.

       ENDIF.

ENDFORM.

原文地址:https://www.cnblogs.com/lsjy/p/14518241.html