在用户输入后读取ALV更改?

问题描述 投票:0回答:2

我有一个报告,它通过 ALV 网格输出我的内部表的数据。输出本身包含一些信息和每行两个复选框。如有必要,用户可以选中这些框,现在我需要读回表格才能知道选中了哪些框。之后,根据选中两个框中的哪一个,相应的行将进行不同的处理。

我已经尝试过方法

get_actual_view
,我不知道如何使用正确的方法和方法
get_selected_rows
,它似乎获取用户选择的行的索引,但不是其内容。

用户选中复选框后,如何读回表格(并按下按钮继续,这将触发报告中的编码来读取数据、处理数据并将其写回到网格中)?

abap alv
2个回答
4
投票

需要调用CHECK_CHANGED_DATA

的方法
CL_GUI_ALV_GRID
将ALV网格中的输入传输到内表(适用于ALV中的各种输入字段,即不限于复选框)。

最小示例(在

CHECK_CHANGED_DATA
之前/之后添加断点,运行程序,编辑一些数据,例如吸烟者复选框,并查看输入如何反映到内部表中;注意:如果演示表
SBOOK 
为空,运行程序
SAPBC_DATA_GENERATOR
)。该程序使用ABAP 7.40或更高版本编译。注意:单击 here 获取有关虚拟参数和 CL_GUI_CONTAINER=>SCREEN0) 的说明。

REPORT.
DATA go_alv TYPE REF TO cl_gui_alv_grid.
DATA gt_sbook TYPE TABLE OF sbook.

PARAMETERS dummy.

AT SELECTION-SCREEN OUTPUT.
  DATA: lt_fcat TYPE lvc_t_fcat,
        ls_fcat TYPE lvc_s_fcat.
  IF go_alv IS NOT BOUND.
    CREATE OBJECT go_alv
      EXPORTING
        i_parent = cl_gui_container=>screen0.
    SELECT * FROM sbook UP TO 100 ROWS INTO TABLE gt_sbook.
    lt_fcat = CORRESPONDING #( CAST cl_abap_structdescr(
          cl_abap_structdescr=>describe_by_name( 'SBOOK' ) )->get_ddic_field_list( ) ).
    ls_fcat-checkbox = abap_true.
    MODIFY lt_fcat FROM ls_fcat TRANSPORTING checkbox WHERE fieldname = 'SMOKER'.
    go_alv->set_table_for_first_display(
        EXPORTING
          is_layout        = VALUE #( edit = 'X' )
        CHANGING
          it_fieldcatalog  = lt_fcat
          it_outtab        = gt_sbook ).
  ENDIF.

AT SELECTION-SCREEN ON EXIT-COMMAND.
  go_alv->check_changed_data( ). " <=== transfer screen data to GT_SBOOK
  go_alv->free( ).

-1
投票

最好的方法是使用 CL_GUI_ALV_GRID 在 ALV 中显示输出。

对于 ALV 网格的更改,

您必须注册事件DATA_CHANGED,并在数据发生变化时帮助您编写代码。

对于选定的行,您必须在 itab 中创建复选框字段,这将帮助您驱动选定的行。

如果您想将屏幕更改传输到itab,那么您必须调用方法check_changed_data,以便在PAI事件中将更改从屏幕传输到itab。

对于某些场景,如果您想知道行内容的任何变化,那么您必须再创建一个字段data_change长度为1的字符类型。如果itab的内容发生变化,您可以在适当的事件中标记此字段。

问候,

奥马尔·阿卜杜拉

© www.soinside.com 2019 - 2024. All rights reserved.