[英]How to bind DataGrid to display only 25 records of a table having more than 1000 records ..?
[英]How to delete DDIC table records which have different id than row number in internal table?
我有一个两行的 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 等开头,这将导致不等式。
如何解决这个问题?
获取选定行返回行号表。
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。 应该不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.