ABAP – Refresh ALV GRID and keep position and current cell

Since I’ve been rebuilding my Renovation product into the old school Dynpro, it’s meant relearning a few tricks.  Today, my trick was to keep the position, selections and current cell after refreshing the data with new data or updated date.  First off, I need to thank this post for the great info.

Here’s the basics.  Before you refresh the table, you will need to perform the following on your ALV grid.

  data: es_row_no  type lvc_s_roid.
  data: es_row_info  type lvc_s_row.
  data: es_col_info  type lvc_s_col.
  data: fes_row_no  type lvc_s_roid.
  data: fes_row_id  type lvc_s_row.
  data: fes_col_id  type lvc_s_col.
  data: mt_cells type lvc_t_ceno.
  data: mt_rows type lvc_t_row.

  grid->get_scroll_info_via_id(
  importing
    es_row_no   = es_row_no
es_row_info 
= es_row_info
es_col_info 
= es_col_info
).

  grid->get_current_cell(
    importing
*        e_row     = e_row
*        e_value   = e_value
*        e_col     = e_col
      es_row_id = fes_row_id
es_col_id 
= fes_col_id
es_row_no 
= fes_row_no
).

  grid->get_selected_rows(
  importing
    et_index_rows = mt_rows
*            et_row_no     = et_row_no
    ).
  if mt_rows[] is initial.
    grid->get_selected_cells_id(
    importing  et_cells = mt_cells ).
  endif.

Now, there are multiple ways to refresh the table, I use set_table_for_first_display, but the post example uses refresh_table_display.  Either way, after you do your refresh, then run the following to set the position and selections.

    if mt_cells[] is not initial.
      grid->set_selected_cells_id( it_cells = mt_cells   ).
    else.
      grid->set_selected_rows(
      it_index_rows            = mt_rows
*        it_row_no                = it_row_no
*        is_keep_other_selections = is_keep_other_selections
      ).
    endif.

  grid->set_scroll_info_via_id(
  is_row_info = es_row_info
is_col_info 
= es_col_info
is_row_no   
= es_row_no
).

    grid->set_current_cell_via_id( is_row_id = fes_row_id
is_column_id 
= fes_col_id
is_row_no 
= fes_row_no ).
  refresh: mt_rows[], mt_cells[].

Thanks for reading,

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top