我得到了一个报告,它通过ALV网格输出我内部表格的数据。输出本身由一些信息和每行的两个复选框组成。如果需要,用户可以选中这些框,现在我需要重新读取表,以便了解选中了哪些框。根据两个框中的哪一个被选中,相应的行将在以后进行不同的处理。
我已经尝试了get_actual_view
方法(我不知道如何使用)和get_selected_rows
方法(它似乎获取用户选择的行的索引,但不获取其内容)。
在用户选中复选框(并按下按钮继续,这将触发报告中的编码以读取数据、处理数据并将其写回网格)之后,如何读取表?
发布于 2019-02-20 18:54:48
您需要调用CL_GUI_ALV_GRID
的CHECK_CHANGED_DATA
方法将输入从ALV网格传输到内部表(它适用于ALV中的所有类型的输入字段,即不限于复选框)。
最小示例(在CHECK_CHANGED_DATA
之前/之后添加断点,运行程序,编辑一些数据,例如smoker复选框,并查看输入如何反映到内部表中;注意:如果演示表SBOOK
为空,则运行程序SAPBC_DATA_GENERATOR
) -它使用ABAP7.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( ).
发布于 2019-02-19 19:12:56
最好的方法是使用CL_GUI_ALV_GRID.在ALV中显示输出
对于ALV网格中的更改,
您必须注册event DATA_CHANGED,并将在数据更改的情况下帮助您编写代码。
对于选定的行,您必须在itab中创建复选框字段,以帮助您驱动选定的行。
如果要将屏幕更改传输到itab,则必须在PAI event中调用check_changed_data方法将更改从屏幕传输到itab。
在某些情况下,如果您想知道行内容的任何更改,则必须再创建一个长度为1的字段data_change字符类型。如果itab的内容有更改,您可以在适当的事件中标记此字段。
致以敬意,
奥马尔·阿卜杜拉
https://stackoverflow.com/questions/54763326
复制相似问题