收到用户的一个关于ALV Report的问题反馈,具体是这样的,该ALV是可编辑的,可进行增加、删除、复制及编辑功能,用户删除了几行数据之后直接点击保存按钮,保存完成之后,被删除的几行又还原出来了。
奇怪的是通过选中行项目,点击“删除行”按钮可正常删除,可选中之后直接按下“Del”键删除后保存完成了又显示回来了。
其实这里只需要用到下面的这个方法就可以很好的解决上面的问题:
代码语言:javascript复制call method po_grid->check_changed_data
importing
e_valid = l_valid.
获取画面数据改变的事件,并把相应的数据修改到内表。
具体代码如下:
代码语言:javascript复制types: begin of y_stat,
type type bapi_mtype,
text type bapi_msg,
end of y_stat.
data: gs_stat type y_stat.
"定义略
代码语言:javascript复制*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0200 input.
save_ok = ok_code.
clear ok_code.
clear: gs_stat.
perform check_changed_data using go_grid changing gs_stat-type.
if gs_stat-type = gc_e. exit. endif.
case save_ok.
when 'BACK'.
leave to screen 0.
when 'SAVE'.
perform check_data.
perform save_data.
endcase.
endmodule. " USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*& Form CHECK_CHANGED_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GO_GRID text
* <--P_GS_STAT text
*----------------------------------------------------------------------*
form check_changed_data using po_grid type ref to cl_gui_alv_grid
changing p_type.
data: l_valid type c.
clear: l_valid.
call method po_grid->check_changed_data
importing
e_valid = l_valid.
if l_valid is initial.
p_type = gc_e.
endif.
endform. " CHECK_CHANGED_DATA