解决ALV刷新后选中状态丢失的办法

在ALV的data_change事件中刷新了ALV,导致每次更改数据时丢失了ALV的选中状态,导致后续

保存的时候使用get_selected_rows方法时丢失数据,导致ALV编辑后更新失败。

解决方法:每次更新后重新用set_selected_rows方法填充选中行。

                   还有一种方法就是用CHECKBOX,这要看用户使用习惯。

  CALL METHOD g_grid->get_selected_rows
    IMPORTING
      et_index_rows = lt_row
      et_row_no     = l_roid.


  PERFORM frm_refresh_alv USING g_grid.

  CALL METHOD g_grid->set_selected_rows
    EXPORTING
      it_index_rows = lt_row.
*& 刷新ALV页面
*&---------------------------------------------------------------------*
*&      --> GV_GRID
*&---------------------------------------------------------------------*
FORM frm_refresh_alv  USING    pv_grid TYPE REF TO cl_gui_alv_grid.

  DATA: ls_stable        TYPE lvc_s_stbl.

  ls_stable-row = 'X'.
  ls_stable-col = 'X'.

  CALL METHOD pv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.

 

Alv报表中,要标记已选中的数据并获取被选中的行,可以按照以下步骤进行操作: 1. 首先,需要在Alv报表的代码中定义一个内部表来保存被选中的行数据,可以命名为"lt_selected_rows"。 2. 监听用户的选择事件,可以通过ALV的事件"USER_COMMAND"来实现。这个事件会在报表发生用户操作时触发。 3. 在事件代码中,判断用户操作的类型,如果是选择操作(例如按下Enter键或点击选中某一行),则获取当前选中行的行号。 4. 通过行号获取被选中的行数据,并将其添加到定义的内部表"lt_selected_rows"中。 5. 标记已选中的行,可以设置一个标记字段,在示例中命名为"isChecked"。将被选中行的该字段设置为'X',以便在界面上显示不同的标记效果。 6. 最后,可以在需要的地方使用该内部表"lt_selected_rows"来获取被选中的行数据,以便进行后续处理。 示例代码如下: DATA: lt_selected_rows TYPE TABLE OF t_data, "定义内部表保存选中行数据 ls_selected_row TYPE t_data, "定义单条选中行数据结构体 lv_selected_rownum TYPE sy-tabix. "定义选中行的行号 "在用户命令事件 USER_COMMAND 中执行以下代码 CASE sy-ucomm. WHEN 'ENTER' OR 'FLIPDELETE'. "获取当前选中行的行号 CALL METHOD r_alv->get_selected_rows IMPORTING et_row_no = lt_selected_rowno. LOOP AT lt_selected_rowno INTO lv_selected_rownum. "通过行号获取选中行的数据 READ TABLE gt_data INTO ls_selected_row INDEX lv_selected_rownum. IF sy-subrc = 0. "标记已选中的行 ls_selected_row-isChecked = 'X'. "将选中行数据添加到内部表 APPEND ls_selected_row TO lt_selected_rows. ENDIF. ENDLOOP. ENDCASE. 这样,通过以上步骤,我们就可以在Alv报表中标记已选中的行并将选中行的数据保存到内部表中,以便进行后续的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值