对于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.