在用户输入后阅读ALV更改

  • 本文关键字:ALV 更改 用户 abap alv
  • 更新时间 :
  • 英文 :


我有一个报告,该报告通过ALV网格输出内部表的数据。输出本身由每行的一些信息和两个复选框组成。用户可以在必要时选中这些框,现在我需要回去回头,以了解检查了哪些框。之后,相应的行将根据检查两个框中的哪个。

我已经尝试了方法get_actual_view,我不知道该如何使用正确和方法get_selected_rows,它似乎可以获得用户选择的行的索引,但没有得到其内容。

用户选中了框后,我该如何读取表(并按下按钮继续,它将触发报告中的编码以读取数据,对其进行处理并将其写回网格)?

您需要调用 CL_GUI_ALV_GRID的方法 CHECK_CHANGED_DATA 以将输入从ALV网格传输到内部表(它适用于内部表(它适用于各种输入字段)alv,即不限于复选框)。

最小示例(在CHECK_CHANGED_DATA之前/之后添加一个断点,运行程序,编辑一些数据,例如吸烟者复选框,并查看输入如何反映到内部表中; NB:如果演示表SBOOK为空,请运行程序SAPBC_DATA_GENERATOR) - 它使用ABAP 7.40和 :

编译
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( ).

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

用于更改ALV网格,

您必须注册事件 data_changed ,并将在数据更改时帮助您编写代码。

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

如果要将屏幕更改传输到ITAB,则必须调用方法 check_changed_data ,以将更改从屏幕转移到itab at pai event

对于某些情况,如果您想知道行内容中的任何更改,则必须创建一个更多字段 data_change 具有长度的字符类型1.更改ITAB的内容。

问:

Umar Abdullah

相关内容

  • 没有找到相关文章

最新更新