从 ALV 中检索过滤后的数据
Retrieve filtered data from ALV
当 ALV 上还使用了过滤器时,是否有一种简单的方法可以检索显示的 ALV 数据?
使用的ALV是CL_GUI_ALV_GRID
的对象。向用户显示时,默认情况下会在其上放置一个过滤器。用户还有一个按钮可以处理 ALV 中的数据。如何确保该过程仅适用于显示的数据,即使用户在 ALV 上放置了自己的过滤器?
例如:从具有 10 行的 itab 创建了一个 ALV,但是因为在 ALV 上还传递了一个过滤器,所以只显示了 8 行。按下按钮时,我只想处理当前显示给用户的 8 行。
我已经尝试为此目的找到一个功能模块,但我只能找到一个适用于 ALV 中选定行的 FM。
编辑: 此外,有一个方法叫做 get_filtered_entries
,但它只检索那些未显示的条目。使用它来翻译显示的条目将非常耗时。 get_filtered_entries
提前致谢。
GET_FILTERED_ENTRIES
returns table 个排除的行索引。您只需要在处理过程中跳过这些即可。
" Copy original table
DATA(lit_buffer) = it_out[].
" Get excluded rows
o_grid->get_filtered_entries(
IMPORTING
et_filtered_entries = DATA(lit_index)
).
" Reverse order to keep correct indizes; thnx futu
SORT lit_index DESCENDING.
" Remove excluded rows from buffer
LOOP AT lit_index ASSIGNING FIELD-SYMBOL(<index>).
DELETE lit_buffer INDEX <index>.
ENDLOOP.
编辑: 我调试了 cl_gui_alv_grid
一点,似乎根本不存在原始 table 的过滤版本。这些行被过滤、排序、分组并立即转移到 table 个单元格中。看起来几乎不可能在没有性能缺陷的情况下获得显示的行。
当 ALV 上还使用了过滤器时,是否有一种简单的方法可以检索显示的 ALV 数据?
使用的ALV是CL_GUI_ALV_GRID
的对象。向用户显示时,默认情况下会在其上放置一个过滤器。用户还有一个按钮可以处理 ALV 中的数据。如何确保该过程仅适用于显示的数据,即使用户在 ALV 上放置了自己的过滤器?
例如:从具有 10 行的 itab 创建了一个 ALV,但是因为在 ALV 上还传递了一个过滤器,所以只显示了 8 行。按下按钮时,我只想处理当前显示给用户的 8 行。
我已经尝试为此目的找到一个功能模块,但我只能找到一个适用于 ALV 中选定行的 FM。
编辑: 此外,有一个方法叫做 get_filtered_entries
,但它只检索那些未显示的条目。使用它来翻译显示的条目将非常耗时。 get_filtered_entries
提前致谢。
GET_FILTERED_ENTRIES
returns table 个排除的行索引。您只需要在处理过程中跳过这些即可。
" Copy original table
DATA(lit_buffer) = it_out[].
" Get excluded rows
o_grid->get_filtered_entries(
IMPORTING
et_filtered_entries = DATA(lit_index)
).
" Reverse order to keep correct indizes; thnx futu
SORT lit_index DESCENDING.
" Remove excluded rows from buffer
LOOP AT lit_index ASSIGNING FIELD-SYMBOL(<index>).
DELETE lit_buffer INDEX <index>.
ENDLOOP.
编辑: 我调试了 cl_gui_alv_grid
一点,似乎根本不存在原始 table 的过滤版本。这些行被过滤、排序、分组并立即转移到 table 个单元格中。看起来几乎不可能在没有性能缺陷的情况下获得显示的行。