ALV一行跳转到另一个alv
时间: 2023-09-01 19:06:25 浏览: 145
两个App相互跳转
在ALV中实现一行跳转到另一个ALV可以通过以下步骤实现:
1. 在第一个ALV中双击某一行时,获取该行的数据,并将数据传递到第二个ALV中。
2. 在第二个ALV中显示传递过来的数据。
具体实现方式如下:
1. 在第一个ALV中添加双击事件处理程序,获取当前双击行的数据,并将数据传递到第二个ALV中。可以使用函数模块 REUSE_ALV_GRID_DISPLAY 或方法 cl_gui_alv_grid=>factory 创建第二个ALV对象,然后使用 EXPORT TO MEMORY 将数据导出到内存中。
2. 在第二个ALV中添加初始化事件处理程序,从内存中导入数据,并在ALV中显示。可以使用 IMPORT FROM MEMORY 将数据导入到内存中,然后使用 SET_TABLE_FOR_FIRST_DISPLAY 或者 SET_TABLE_FOR_LVC_GRID 方法设置ALV显示的数据和属性。
示例代码如下:
第一个ALV:
```
DATA: gv_data TYPE REF TO data.
" 双击事件处理程序
DATA: lr_event TYPE REF TO cl_salv_events_table.
CREATE OBJECT lr_event
EXPORTING
iv_event_id = cl_salv_events_table=>event_id_double_click.
SET HANDLER handle_double_click FOR lr_event.
" 双击处理程序
METHOD handle_double_click.
DATA: lr_table TYPE REF TO cl_salv_table,
lr_row TYPE REF TO cl_salv_wd_table_row,
lv_data TYPE string.
" 获取当前双击的行
lr_table = me->alv->get_model( ).
lr_row = lr_table->if_salv_wd_table=>get_current_row( ).
" 获取行数据
CALL METHOD lr_row->if_salv_wd_table_column~get_value
RECEIVING
rv_value = lv_data.
" 将数据导出到内存中
CREATE DATA gv_data TYPE string.
ASSIGN gv_data->* TO FIELD-SYMBOL(<fs_data>).
<fs_data> = lv_data.
EXPORT gv_data TO MEMORY ID 'ALV_DATA'.
" 创建第二个ALV对象并跳转到第二个ALV
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>true
IMPORTING
r_salv_table = lr_table
CHANGING
t_table = gt_data.
lr_table->display( ).
ENDMETHOD.
```
第二个ALV:
```
" 初始化事件处理程序
METHOD handle_init.
DATA: lv_data TYPE string.
" 从内存中导入数据
IMPORT gv_data FROM MEMORY ID 'ALV_DATA'.
ASSIGN gv_data->* TO FIELD-SYMBOL(<fs_data>).
lv_data = <fs_data>.
" 设置ALV的数据和属性
CALL METHOD me->alv->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
is_variant = gs_variant
CHANGING
it_outtab = gt_data.
ENDMETHOD.
```
其中,`gt_data` 为第二个ALV显示的数据,`gs_variant` 为第二个ALV的属性。在实际开发中,需要根据具体需求进行设置。
阅读全文