我有两排的ALV。我还想删除内部表和字典表中的这些行。为了获得我选择的alv中的哪些行,我使用了一个方法
go_selections = go_salv->get_selections( ).
go_rows = go_selections->get_selected_rows( )最近,我正在迭代结果LOOP AT go_rows INTO gv_row.
在上面的循环中,我有另一个循环,它将数据从内部表存储到工作区。然后,设置计数器变量,该变量保存字典表的id,并删除各自的行。
LOOP AT gr_data INTO lr_znewfdkey6.
counter2 = lr_znewfdkey6-id.
IF counter2 EQ gv_row.
DELETE FROM znew_fdkey01 WHERE id EQ lr_znewfdkey6-id.
MESSAGE 'Row deleted .' TYPE 'I'.但是不幸的是,只有当字典表的id等于在alv中选择的行号时,这才有效。如果字典表中有lr_znewfdkey6-id (例如等于5 ),则get_selected_rows( )返回由1开始的值等,这将导致不平等。
怎么解决这个问题?
发布于 2019-11-14 14:16:15
获取选定的行返回行号表。
lt_rows = lo_selections->get_selected_rows( ).这些数字直接对应于加载到ALV中的itab。不管它是被分类还是过滤过。它不对应于数据库中的任何字段,比如ID字段或其他任何字段。
假设gr_data是分配给ALV的itab。让我们循环lt_rows并在索引处读取gr_data
LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
READ TABLE gr_data INTO ls_data INDEX <row>.
IF sy-subrc = 0.
APPEND ls_data TO lt_selected.
ENDIF.
ENDLOOP.执行后,将将选定的gr_data行收集到lt_selected itab中。删除
LOOP AT lt_selected ASSIGNING FIELD-SYMBOL(<row>).
DELETE TABLE gr_data FROM <row>.
ENDLOOP.你也可以简单地做:
LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
DELETE gr_data INDEX <row>.
ENDLOOP.在那之后刷新你的ALV。应该是好的。
https://stackoverflow.com/questions/58851247
复制相似问题