<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: ALV wrong row_id in  METHOD handle_data_changed when grid is sorted in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678428#M618928</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't do it this way myself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use  a "generalized"  ALV class using a dynamic table --then the latest state of the GRID data is always in your dynamic table &amp;lt;dyn_table&amp;gt;. I have a copy of the original as well in &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This means at either event ON DATA CHANGED or ON DATA CHANGED FINISHED I've got the latest state of the table even if sorted and the last cell(s) / row(s) selected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the code&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INCLUDE ZZJIMBOXX_INCL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Generic ALV class etc  for use as INCLUDE  Jimbo 2007.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DEFINE col_name.&lt;/P&gt;&lt;P&gt; READ TABLE it_fldcat INTO wa_it_fldcat INDEX &amp;amp;1.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-coltext = &amp;amp;2.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-outputlen = &amp;amp;3.&lt;/P&gt;&lt;P&gt;      modify it_fldcat from wa_it_fldcat index &amp;amp;1.&lt;/P&gt;&lt;P&gt;END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DEFINE toolbar_funcs.&lt;/P&gt;&lt;P&gt;   CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;    MOVE 0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;1 TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;    MOVE SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;2 TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;3 TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;    APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt; END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;INCLUDE  &amp;lt;icon&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FIELD-SYMBOLS :&lt;/P&gt;&lt;P&gt;   &amp;lt;fs1&amp;gt;          TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;fs0&amp;gt;          TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;dyn_table&amp;gt;    TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;orig_table&amp;gt;   TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;dyn_wa&amp;gt;      TYPE ANY.&lt;/P&gt;&lt;P&gt; CLASS  zcl_alv_test DEFINITION DEFERRED.&lt;/P&gt;&lt;P&gt; DATA:&lt;/P&gt;&lt;P&gt;   z_object           TYPE REF TO zcl_alv_test.  "Instantiate our class&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Attributes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA:&lt;/P&gt;&lt;P&gt;        it_fldcat          TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;        i_gridtitle        TYPE lvc_title,&lt;/P&gt;&lt;P&gt;        wa_it_fldcat       TYPE lvc_s_fcat,&lt;/P&gt;&lt;P&gt;        new_table          TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        dy_table           TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        inserted_tab       TYPE lvc_t_moce,&lt;/P&gt;&lt;P&gt;        deleted_tab        TYPE LVC_T_MOCE,&lt;/P&gt;&lt;P&gt;        changed_tab        TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        is_layout          TYPE LVC_S_LAYO,&lt;/P&gt;&lt;P&gt;        modified_cells_tab TYPE LVC_T_MODI,&lt;/P&gt;&lt;P&gt;        dy_line            TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt; CLASS zcl_alv_test DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;     constructor&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          z_object TYPE REF TO zcl_alv_test,&lt;/P&gt;&lt;P&gt;     display_grid&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;         g_outtab TYPE STANDARD TABLE&lt;/P&gt;&lt;P&gt;         g_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;       CHANGING&lt;/P&gt;&lt;P&gt;         it_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;         GT_OUTTAB TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;      change_title&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle TYPE lvc_title,&lt;/P&gt;&lt;P&gt;      refresh_grid,&lt;/P&gt;&lt;P&gt;      set_cursor&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         row_id      TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;         column_id   TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;         row_no      TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;      build_dynamic_structures&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         my_line TYPE ANY&lt;/P&gt;&lt;P&gt;         calling_program TYPE sy-repid&lt;/P&gt;&lt;P&gt;       EXPORTING&lt;/P&gt;&lt;P&gt;         dy_table TYPE REF TO DATA&lt;/P&gt;&lt;P&gt;       CHANGING&lt;/P&gt;&lt;P&gt;         it_fldcat TYPE lvc_t_fcat .&lt;/P&gt;&lt;P&gt;  PRIVATE SECTION.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Attributes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;     lr_rtti_struc           TYPE REF TO cl_abap_structdescr,&lt;/P&gt;&lt;P&gt;     zog                     LIKE LINE OF lr_rtti_struc-&amp;gt;components,&lt;/P&gt;&lt;P&gt;     zogt                    LIKE table of zog,&lt;/P&gt;&lt;P&gt;     struct_grid_lset        TYPE lvc_s_layo,&lt;/P&gt;&lt;P&gt;     e_row                   TYPE lvc_s_row,&lt;/P&gt;&lt;P&gt;     e1_row                  TYPE i,&lt;/P&gt;&lt;P&gt;     e_value                 TYPE c,&lt;/P&gt;&lt;P&gt;     e1_col                  TYPE i,&lt;/P&gt;&lt;P&gt;     e_column                TYPE lvc_s_col,&lt;/P&gt;&lt;P&gt;     es_rowid                TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     es_row_id               TYPE LVC_S_ROW,&lt;/P&gt;&lt;P&gt;     es_col_id               TYPE LVC_S_COL,&lt;/P&gt;&lt;P&gt;     es_row_no               TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     grid_container1         TYPE REF TO cl_gui_custom_container,&lt;/P&gt;&lt;P&gt;     grid1                   TYPE REF TO cl_gui_alv_grid,&lt;/P&gt;&lt;P&gt;     ls_layout               TYPE kkblo_layout,&lt;/P&gt;&lt;P&gt;     lt_fieldcat_wa          TYPE kkblo_fieldcat,&lt;/P&gt;&lt;P&gt;     gt_outtab               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     l_mode                  TYPE raw4,&lt;/P&gt;&lt;P&gt;     celltab                 TYPE lvc_t_styl,&lt;/P&gt;&lt;P&gt;     wa_celltab              TYPE lvc_s_styl,&lt;/P&gt;&lt;P&gt;     lt_fieldcat             TYPE kkblo_t_fieldcat,&lt;/P&gt;&lt;P&gt;     l_tabname               TYPE slis_tabname,&lt;/P&gt;&lt;P&gt;     ls_toolbar              TYPE stb_button,&lt;/P&gt;&lt;P&gt;     caller                  TYPE sy-repid,&lt;/P&gt;&lt;P&gt;     g_outtab1               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     g_fldcat1                TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Event Receivers - These methods are entered&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when the specified event occurs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    EVENTS: before_user_command.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;     on_user_command&lt;/P&gt;&lt;P&gt;        FOR EVENT before_user_command OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_ucomm&lt;/P&gt;&lt;P&gt;          sender,&lt;/P&gt;&lt;P&gt;     on_toolbar&lt;/P&gt;&lt;P&gt;        FOR EVENT toolbar OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_object&lt;/P&gt;&lt;P&gt;          e_interactive,&lt;/P&gt;&lt;P&gt;     on_dubbelklik&lt;/P&gt;&lt;P&gt;        FOR EVENT double_click OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           e_row&lt;/P&gt;&lt;P&gt;           e_column&lt;/P&gt;&lt;P&gt;           es_row_no,&lt;/P&gt;&lt;P&gt;    handle_data_changed&lt;/P&gt;&lt;P&gt;        FOR EVENT data_changed OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          er_data_changed,&lt;/P&gt;&lt;P&gt;     handle_data_changed_finished&lt;/P&gt;&lt;P&gt;        FOR EVENT data_changed_finished OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_modified&lt;/P&gt;&lt;P&gt;          et_good_cells,&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Rest of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;     process,&lt;/P&gt;&lt;P&gt;     dubbelklik&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;           e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;           es_row_no   TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     return_structure&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          my_line      TYPE ANY,&lt;/P&gt;&lt;P&gt;     create_dynamic_fcat&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;          it_fldcat    TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;     create_dynamic_table&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           it_fldcat   TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;          dy_table     TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     download_to_excel,&lt;/P&gt;&lt;P&gt;     refresh.&lt;/P&gt;&lt;P&gt;ENDCLASS.                    "zcl_alv_test DEFINITION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Implementation definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS zcl_alv_test IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Constructor&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; create our reference / instance to cl_gui_alv_grid&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CREATE OBJECT grid_container1&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;           container_name = 'CCONTAINER1'.&lt;/P&gt;&lt;P&gt;    CREATE OBJECT  grid1&lt;/P&gt;&lt;P&gt;       EXPORTING&lt;/P&gt;&lt;P&gt;          i_parent = grid_container1.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set event handlers&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    SET HANDLER z_object-&amp;gt;on_user_command for grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER z_object-&amp;gt;on_toolbar for grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed FOR grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed_finished FOR grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;on_dubbelklik FOR grid1.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;register_edit_event&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Rest of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD on_dubbelklik.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;dubbelklik&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        e_row     = e_row&lt;/P&gt;&lt;P&gt;        e_column  = e_column&lt;/P&gt;&lt;P&gt;        es_row_no = es_row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                       "on_dubbelklik&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD set_cursor.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_current_cell_via_id&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;        is_row_id     = row_id&lt;/P&gt;&lt;P&gt;        is_column_id  = column_id&lt;/P&gt;&lt;P&gt;        is_row_no  =    row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.&lt;/P&gt;&lt;P&gt;  METHOD  handle_data_changed.&lt;/P&gt;&lt;P&gt;    call method grid1-&amp;gt;get_current_cell&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        e_row     = e1_row&lt;/P&gt;&lt;P&gt;        e_value   = e_value&lt;/P&gt;&lt;P&gt;        e_col     = e1_col&lt;/P&gt;&lt;P&gt;        es_row_id = es_row_id&lt;/P&gt;&lt;P&gt;        es_col_id = es_col_id&lt;/P&gt;&lt;P&gt;        es_row_no = es_row_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    changed_tab  = er_data_changed-&amp;gt;mp_mod_rows.&lt;/P&gt;&lt;P&gt;    inserted_tab = er_data_changed-&amp;gt;mt_inserted_rows.&lt;/P&gt;&lt;P&gt;    deleted_tab  = er_data_changed-&amp;gt;mt_deleted_rows.&lt;/P&gt;&lt;P&gt;    modified_cells_tab = er_data_changed-&amp;gt;mt_mod_cells.&lt;/P&gt;&lt;P&gt;    PERFORM data_changed  IN PROGRAM (caller) IF FOUND&lt;/P&gt;&lt;P&gt;       USING changed_tab&lt;/P&gt;&lt;P&gt;             inserted_tab&lt;/P&gt;&lt;P&gt;             deleted_tab&lt;/P&gt;&lt;P&gt;             modified_cells_tab.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "handle_data_changed&lt;/P&gt;&lt;P&gt;  METHOD handle_data_changed_finished.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "handle_data_changed_finished&lt;/P&gt;&lt;P&gt;  METHOD return_structure.&lt;/P&gt;&lt;P&gt;    lr_rtti_struc ?= cl_abap_structdescr=&amp;gt;DESCRIBE_BY_DATA( my_line ).&lt;/P&gt;&lt;P&gt;    zogt[]  = lr_rtti_struc-&amp;gt;components.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "return_structure&lt;/P&gt;&lt;P&gt;  METHOD create_dynamic_fcat.&lt;/P&gt;&lt;P&gt;    LOOP AT zogt INTO zog.&lt;/P&gt;&lt;P&gt;      CLEAR wa_it_fldcat.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-fieldname = zog-name .&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-dataTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intlen = zog-length.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-decimals = zog-decimals.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-coltext = zog-name.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-lowercase = 'X'.&lt;/P&gt;&lt;P&gt;      APPEND wa_it_fldcat TO it_fldcat .&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "create_dynamic_fcat&lt;/P&gt;&lt;P&gt;  METHOD  download_to_excel.&lt;/P&gt;&lt;P&gt;    assign g_outtab1-&amp;gt;* to &amp;lt;fs0&amp;gt;.&lt;/P&gt;&lt;P&gt;    assign g_fldcat1-&amp;gt;* to &amp;lt;fs1&amp;gt;.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION  'LVC_TRANSFER_TO_KKBLO'&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;       it_fieldcat_lvc   = &amp;lt;fs1&amp;gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    is_layout_lvc     = m_cl_variant-&amp;gt;ms_layout&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        is_tech_complete  = ' '&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       es_layout_kkblo   = ls_layout&lt;/P&gt;&lt;P&gt;       et_fieldcat_kkblo = lt_fieldcat.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT lt_fieldcat INTO lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;      CLEAR lt_fieldcat_wa-tech_complete.&lt;/P&gt;&lt;P&gt;      IF lt_fieldcat_wa-tabname IS initial.&lt;/P&gt;&lt;P&gt;        lt_fieldcat_wa-tabname = '1'.&lt;/P&gt;&lt;P&gt;        MODIFY lt_fieldcat FROM lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;      l_tabname = lt_fieldcat_wa-tabname.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'ALV_XXL_CALL'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_tabname           = l_tabname&lt;/P&gt;&lt;P&gt;        is_layout           = ls_layout&lt;/P&gt;&lt;P&gt;        it_fieldcat         = lt_fieldcat&lt;/P&gt;&lt;P&gt;        i_title             = sy-title&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        it_outtab           = &amp;lt;fs0&amp;gt;&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        fatal_error         = 1&lt;/P&gt;&lt;P&gt;        no_display_possible = 2&lt;/P&gt;&lt;P&gt;        others              = 3.&lt;/P&gt;&lt;P&gt;    IF  sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      message id sy-msgid TYPE 'S' number sy-msgno&lt;/P&gt;&lt;P&gt;             with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "download_to_excel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD change_title.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_gridtitle&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_gridtitle = i_gridtitle.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "CHANGE_TITLE&lt;/P&gt;&lt;P&gt;  METHOD create_dynamic_table.&lt;/P&gt;&lt;P&gt;    CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        ep_table        = dy_table.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "create_dynamic_table&lt;/P&gt;&lt;P&gt;  METHOD build_dynamic_structures.&lt;/P&gt;&lt;P&gt;    caller = calling_program.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;return_structure&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        my_line = my_line.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;create_dynamic_fcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        it_fldcat = it_fldcat.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        dy_table  = dy_table.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "build_dynamic_structures&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD display_grid.&lt;/P&gt;&lt;P&gt;    GET REFERENCE OF g_outtab INTO g_outtab1.&lt;/P&gt;&lt;P&gt;    GET REFERENCE OF g_fldcat INTO g_fldcat1.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-edit = 'X'. "To enable editing in ALV&lt;/P&gt;&lt;P&gt;    struct_grid_lset-grid_title = 'TEST ALV USE generic class'.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-ctab_fname = 'T_CELLCOLORS'.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-stylefname = 'CELLTAB'.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_ready_for_input&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_ready_for_input = '1'.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_table_for_first_display&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        is_layout       = struct_grid_lset&lt;/P&gt;&lt;P&gt;      CHANGING&lt;/P&gt;&lt;P&gt;        it_outtab       = gt_outtab&lt;/P&gt;&lt;P&gt;        it_fieldcatalog = it_fldcat.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "display_grid&lt;/P&gt;&lt;P&gt;  METHOD on_user_command.&lt;/P&gt;&lt;P&gt;    CASE e_ucomm.&lt;/P&gt;&lt;P&gt;      WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;        LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;      WHEN 'EXCEL'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;download_to_excel.&lt;/P&gt;&lt;P&gt;      WHEN 'SAVE'.&lt;/P&gt;&lt;P&gt;      WHEN 'PROC'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;process.&lt;/P&gt;&lt;P&gt;      WHEN 'REFR'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;refresh.&lt;/P&gt;&lt;P&gt;    ENDCASE.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.  "on_user_command&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD on_toolbar.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;customize this section with your own Buttons&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;When a button is pressed method ON_USER_COMMAND is entered&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;   toolbar_funcs 'EXIT'  icon_system_end            'Click2exit'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'SAVE'  icon_system_save           'Savedata'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'EDIT'  icon_toggle_display_change 'Edit data'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'PROC'  icon_businav_process       'Process'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'EXCEL' icon_xxl                   'Excel'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'REFR'  icon_refresh               'Refresh'.&lt;/P&gt;&lt;P&gt;   ENDMETHOD.                    "on_toolbar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD refresh_grid.&lt;/P&gt;&lt;P&gt;    CALL METHOD cl_gui_cfw=&amp;gt;flush.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;refresh_table_display.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "refresh_grid&lt;/P&gt;&lt;P&gt;  METHOD refresh.&lt;/P&gt;&lt;P&gt;    PERFORM refresh IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "refresh&lt;/P&gt;&lt;P&gt;  METHOD process.&lt;/P&gt;&lt;P&gt;    PERFORM process IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "process&lt;/P&gt;&lt;P&gt;  METHOD dubbelklik.&lt;/P&gt;&lt;P&gt;    perform dubbelklik IN PROGRAM (caller) IF FOUND&lt;/P&gt;&lt;P&gt;       USING e_row&lt;/P&gt;&lt;P&gt;             e_column&lt;/P&gt;&lt;P&gt;             es_row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "dubbelklik&lt;/P&gt;&lt;P&gt;ENDCLASS.                    "zcl_alv_test IMPLEMENTATION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now for example I can use this program to fill a grid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Program  ZJIMBOTESTX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;INCLUDE ZZJIMBOXX_INCL.  "Code is above&lt;/P&gt;&lt;P&gt;TABLES : SPFLI.&lt;/P&gt;&lt;P&gt;TYPES:  BEGIN OF s_elements.&lt;/P&gt;&lt;P&gt;        INCLUDE  STRUCTURE spfli..&lt;/P&gt;&lt;P&gt;TYPES: END OF    s_elements.&lt;/P&gt;&lt;P&gt;DATA:&lt;/P&gt;&lt;P&gt;       t_elements         TYPE TABLE OF s_elements,  "refers to our ITAB&lt;/P&gt;&lt;P&gt;       my_line            TYPE s_elements.&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;CALL SCREEN 100.&lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt;MODULE status_0100 OUTPUT.&lt;/P&gt;&lt;P&gt;CREATE OBJECT z_object&lt;/P&gt;&lt;P&gt;      EXPORTING z_object = z_object.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;build_dynamic_structures&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;       my_line = my_line&lt;/P&gt;&lt;P&gt;       calling_program = sy-repid&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       dy_table = dy_table&lt;/P&gt;&lt;P&gt;     CHANGING&lt;/P&gt;&lt;P&gt;       it_fldcat = it_fldcat.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Here before displaying you can change the field catalog to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;adjust your own column names.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*col_name  col-nr 'your name' output length.&lt;/P&gt;&lt;P&gt;   col_name 2 'Carrier' 5.&lt;/P&gt;&lt;P&gt;   col_name 3 'Flt' 4.&lt;/P&gt;&lt;P&gt;   col_name 4 'Dep Ctry' 8.&lt;/P&gt;&lt;P&gt;   col_name 5 'Dep City'  8.&lt;/P&gt;&lt;P&gt;   col_name 6 'Airport'  6.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill dynmic table and display&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;PERFORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt;is_layout-zebra = 'X'.&lt;/P&gt;&lt;P&gt; CALL METHOD z_object-&amp;gt;display_grid&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      g_outtab = &amp;lt;dyn_table&amp;gt;&lt;/P&gt;&lt;P&gt;      g_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;     CHANGING&lt;/P&gt;&lt;P&gt;      it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;      gt_outtab = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;  SET PF-STATUS '0001'.&lt;/P&gt;&lt;P&gt;  SET TITLEBAR '000'.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;MODULE user_command_0100 INPUT.&lt;/P&gt;&lt;P&gt;  CASE sy-ucomm.&lt;/P&gt;&lt;P&gt;    WHEN 'BACK'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'RETURN'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN OTHERS.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;FORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt; SELECT *&lt;/P&gt;&lt;P&gt;       UP TO 200 rows&lt;/P&gt;&lt;P&gt;       FROM SPFLI&lt;/P&gt;&lt;P&gt;       INTO  CORRESPONDING FIELDS OF TABLE &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; save a copy (original table). Use same fcat as ist table.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create 2nd Dyn table to hold original data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;         it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;         ep_table = dy_table.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt;  &amp;lt;orig_table&amp;gt; = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM DATA_CHANGED&lt;/P&gt;&lt;P&gt;   USING&lt;/P&gt;&lt;P&gt;     changed_tab&lt;/P&gt;&lt;P&gt;     inserted_tab&lt;/P&gt;&lt;P&gt;     deleted_tab&lt;/P&gt;&lt;P&gt;     modified_cells_tab.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM process.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Orig table is in dynamic table &amp;lt;orig_table&amp;gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ALV GRID changed table is in &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Loop AT &amp;lt;orig_table&amp;gt;  INTO  &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Do what you want&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;end&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM refresh.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;change data for example delete some lines.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*DELETE  &amp;lt;dyn_table&amp;gt; from 1 to 16.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;refresh_grid.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM dubbelklik&lt;/P&gt;&lt;P&gt;     USING&lt;/P&gt;&lt;P&gt;        e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;        e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;        es_row_no   TYPE  lvc_s_roid.&lt;/P&gt;&lt;P&gt;     SET TITLEBAR '001'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     i_gridtitle = 'Grid Title Changed'.&lt;/P&gt;&lt;P&gt;     CALL METHOD  z_object-&amp;gt;change_title&lt;/P&gt;&lt;P&gt;         EXPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle = i_gridtitle.&lt;/P&gt;&lt;P&gt;    PERFORM refresh.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL METHOD z_object-&amp;gt;set_cursor&lt;/P&gt;&lt;P&gt;   EXPORTING&lt;/P&gt;&lt;P&gt;       row_id     = e_row&lt;/P&gt;&lt;P&gt;       column_id  = e_column&lt;/P&gt;&lt;P&gt;        row_no  = es_row_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now yoy can sort / delete / insert / or wahtever.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code is pretty general so it should cover all your needs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All your application ever needs to do is simply define a structure and fill it.The class will generate the dynamic table and FCAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Modify the class to rmeove toolbar buttons wuou don't use or need.&lt;/P&gt;&lt;P&gt;This class aslo includes a download to EXCEL  with column headings which I often find useful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't bother with mt_good cells etc etc as you can manipulate the &amp;lt;dyn_table&amp;gt; directly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Jimbo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 24 Aug 2007 13:17:48 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2007-08-24T13:17:48Z</dc:date>
    <item>
      <title>ALV wrong row_id in  METHOD handle_data_changed when grid is sorted</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678427#M618927</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everybody,&lt;/P&gt;&lt;P&gt;we've made a small data maintenance report with the ALV grid using the class CL_GUI_ALV_GRID.&lt;/P&gt;&lt;P&gt;My problem is the behaviour of ALV, when the grid is autosorted on a field, which is changed by a user. Within the hanlde method of the event data_changed I get the internal table er_data_changed-&amp;gt;mt_good_cells containing entries (of the type lvc_s_modi) for every field which was changed.  The field ROW_ID containes the row id of the internal table of the grid, in which the change was made by the user. This ROW_ID can be wrong, when the change the user made leads to an autosort of the table, which sorts the table in a different order. When you then access the ALV-table by the row-id you get the wrong, not changed row back.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here a short extract of the code:&lt;/P&gt;&lt;P&gt;******************************************************************************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;METHOD handle_data_changed.&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;    LOOP AT er_data_changed-&amp;gt;mt_good_cells INTO ls_good.&lt;/P&gt;&lt;P&gt;       READ TABLE gt_alv INDEX ls_good-row_id ASSIGNING &amp;lt;l_line_of_alv&amp;gt;.&lt;/P&gt;&lt;P&gt;&amp;lt;i&amp;gt;*      wrong line of the ALV grid is in &amp;lt;l_line_of_alv&amp;gt;&amp;lt;/i&amp;gt;&lt;/P&gt;&lt;P&gt;      ...&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;ENDMETHOD.&lt;/P&gt;&lt;P&gt;******************************************************************************&lt;/P&gt;&lt;P&gt;Have you any idea, how this can be avoided?&lt;/P&gt;&lt;P&gt;Is it possible to disable the autosort &amp;lt;b&amp;gt;before&amp;lt;/b&amp;gt; handle_changed is triggert and to enable it afterwards again?&lt;/P&gt;&lt;P&gt;I'm thankful for any idea.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Horst&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Aug 2007 12:39:17 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678427#M618927</guid>
      <dc:creator>horst_winter</dc:creator>
      <dc:date>2007-08-23T12:39:17Z</dc:date>
    </item>
    <item>
      <title>Re: ALV wrong row_id in  METHOD handle_data_changed when grid is sorted</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678428#M618928</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I don't do it this way myself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use  a "generalized"  ALV class using a dynamic table --then the latest state of the GRID data is always in your dynamic table &amp;lt;dyn_table&amp;gt;. I have a copy of the original as well in &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This means at either event ON DATA CHANGED or ON DATA CHANGED FINISHED I've got the latest state of the table even if sorted and the last cell(s) / row(s) selected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the code&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INCLUDE ZZJIMBOXX_INCL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Generic ALV class etc  for use as INCLUDE  Jimbo 2007.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DEFINE col_name.&lt;/P&gt;&lt;P&gt; READ TABLE it_fldcat INTO wa_it_fldcat INDEX &amp;amp;1.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-coltext = &amp;amp;2.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-outputlen = &amp;amp;3.&lt;/P&gt;&lt;P&gt;      modify it_fldcat from wa_it_fldcat index &amp;amp;1.&lt;/P&gt;&lt;P&gt;END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DEFINE toolbar_funcs.&lt;/P&gt;&lt;P&gt;   CLEAR ls_toolbar.&lt;/P&gt;&lt;P&gt;    MOVE 0 TO ls_toolbar-butn_TYPE.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;1 TO ls_toolbar-function.&lt;/P&gt;&lt;P&gt;    MOVE SPACE TO ls_toolbar-disabled.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;2 TO ls_toolbar-icon.&lt;/P&gt;&lt;P&gt;    MOVE &amp;amp;3 TO ls_toolbar-quickinfo.&lt;/P&gt;&lt;P&gt;    APPEND ls_toolbar TO e_object-&amp;gt;mt_toolbar.&lt;/P&gt;&lt;P&gt; END-OF-DEFINITION.&lt;/P&gt;&lt;P&gt;INCLUDE  &amp;lt;icon&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FIELD-SYMBOLS :&lt;/P&gt;&lt;P&gt;   &amp;lt;fs1&amp;gt;          TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;fs0&amp;gt;          TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;dyn_table&amp;gt;    TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;orig_table&amp;gt;   TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;   &amp;lt;dyn_wa&amp;gt;      TYPE ANY.&lt;/P&gt;&lt;P&gt; CLASS  zcl_alv_test DEFINITION DEFERRED.&lt;/P&gt;&lt;P&gt; DATA:&lt;/P&gt;&lt;P&gt;   z_object           TYPE REF TO zcl_alv_test.  "Instantiate our class&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Attributes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA:&lt;/P&gt;&lt;P&gt;        it_fldcat          TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;        i_gridtitle        TYPE lvc_title,&lt;/P&gt;&lt;P&gt;        wa_it_fldcat       TYPE lvc_s_fcat,&lt;/P&gt;&lt;P&gt;        new_table          TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        dy_table           TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        inserted_tab       TYPE lvc_t_moce,&lt;/P&gt;&lt;P&gt;        deleted_tab        TYPE LVC_T_MOCE,&lt;/P&gt;&lt;P&gt;        changed_tab        TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;        is_layout          TYPE LVC_S_LAYO,&lt;/P&gt;&lt;P&gt;        modified_cells_tab TYPE LVC_T_MODI,&lt;/P&gt;&lt;P&gt;        dy_line            TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt; CLASS zcl_alv_test DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;     constructor&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          z_object TYPE REF TO zcl_alv_test,&lt;/P&gt;&lt;P&gt;     display_grid&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;         g_outtab TYPE STANDARD TABLE&lt;/P&gt;&lt;P&gt;         g_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;       CHANGING&lt;/P&gt;&lt;P&gt;         it_fldcat TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;         GT_OUTTAB TYPE STANDARD TABLE,&lt;/P&gt;&lt;P&gt;      change_title&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle TYPE lvc_title,&lt;/P&gt;&lt;P&gt;      refresh_grid,&lt;/P&gt;&lt;P&gt;      set_cursor&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         row_id      TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;         column_id   TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;         row_no      TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;      build_dynamic_structures&lt;/P&gt;&lt;P&gt;       IMPORTING&lt;/P&gt;&lt;P&gt;         my_line TYPE ANY&lt;/P&gt;&lt;P&gt;         calling_program TYPE sy-repid&lt;/P&gt;&lt;P&gt;       EXPORTING&lt;/P&gt;&lt;P&gt;         dy_table TYPE REF TO DATA&lt;/P&gt;&lt;P&gt;       CHANGING&lt;/P&gt;&lt;P&gt;         it_fldcat TYPE lvc_t_fcat .&lt;/P&gt;&lt;P&gt;  PRIVATE SECTION.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Attributes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;     lr_rtti_struc           TYPE REF TO cl_abap_structdescr,&lt;/P&gt;&lt;P&gt;     zog                     LIKE LINE OF lr_rtti_struc-&amp;gt;components,&lt;/P&gt;&lt;P&gt;     zogt                    LIKE table of zog,&lt;/P&gt;&lt;P&gt;     struct_grid_lset        TYPE lvc_s_layo,&lt;/P&gt;&lt;P&gt;     e_row                   TYPE lvc_s_row,&lt;/P&gt;&lt;P&gt;     e1_row                  TYPE i,&lt;/P&gt;&lt;P&gt;     e_value                 TYPE c,&lt;/P&gt;&lt;P&gt;     e1_col                  TYPE i,&lt;/P&gt;&lt;P&gt;     e_column                TYPE lvc_s_col,&lt;/P&gt;&lt;P&gt;     es_rowid                TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     es_row_id               TYPE LVC_S_ROW,&lt;/P&gt;&lt;P&gt;     es_col_id               TYPE LVC_S_COL,&lt;/P&gt;&lt;P&gt;     es_row_no               TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     grid_container1         TYPE REF TO cl_gui_custom_container,&lt;/P&gt;&lt;P&gt;     grid1                   TYPE REF TO cl_gui_alv_grid,&lt;/P&gt;&lt;P&gt;     ls_layout               TYPE kkblo_layout,&lt;/P&gt;&lt;P&gt;     lt_fieldcat_wa          TYPE kkblo_fieldcat,&lt;/P&gt;&lt;P&gt;     gt_outtab               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     l_mode                  TYPE raw4,&lt;/P&gt;&lt;P&gt;     celltab                 TYPE lvc_t_styl,&lt;/P&gt;&lt;P&gt;     wa_celltab              TYPE lvc_s_styl,&lt;/P&gt;&lt;P&gt;     lt_fieldcat             TYPE kkblo_t_fieldcat,&lt;/P&gt;&lt;P&gt;     l_tabname               TYPE slis_tabname,&lt;/P&gt;&lt;P&gt;     ls_toolbar              TYPE stb_button,&lt;/P&gt;&lt;P&gt;     caller                  TYPE sy-repid,&lt;/P&gt;&lt;P&gt;     g_outtab1               TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     g_fldcat1                TYPE REF TO DATA.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Event Receivers - These methods are entered&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;when the specified event occurs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    EVENTS: before_user_command.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;     on_user_command&lt;/P&gt;&lt;P&gt;        FOR EVENT before_user_command OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_ucomm&lt;/P&gt;&lt;P&gt;          sender,&lt;/P&gt;&lt;P&gt;     on_toolbar&lt;/P&gt;&lt;P&gt;        FOR EVENT toolbar OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_object&lt;/P&gt;&lt;P&gt;          e_interactive,&lt;/P&gt;&lt;P&gt;     on_dubbelklik&lt;/P&gt;&lt;P&gt;        FOR EVENT double_click OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           e_row&lt;/P&gt;&lt;P&gt;           e_column&lt;/P&gt;&lt;P&gt;           es_row_no,&lt;/P&gt;&lt;P&gt;    handle_data_changed&lt;/P&gt;&lt;P&gt;        FOR EVENT data_changed OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          er_data_changed,&lt;/P&gt;&lt;P&gt;     handle_data_changed_finished&lt;/P&gt;&lt;P&gt;        FOR EVENT data_changed_finished OF cl_gui_alv_grid&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          e_modified&lt;/P&gt;&lt;P&gt;          et_good_cells,&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Rest of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;     process,&lt;/P&gt;&lt;P&gt;     dubbelklik&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;           e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;           es_row_no   TYPE lvc_s_roid,&lt;/P&gt;&lt;P&gt;     return_structure&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          my_line      TYPE ANY,&lt;/P&gt;&lt;P&gt;     create_dynamic_fcat&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;          it_fldcat    TYPE lvc_t_fcat,&lt;/P&gt;&lt;P&gt;     create_dynamic_table&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;           it_fldcat   TYPE lvc_t_fcat&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;          dy_table     TYPE REF TO DATA,&lt;/P&gt;&lt;P&gt;     download_to_excel,&lt;/P&gt;&lt;P&gt;     refresh.&lt;/P&gt;&lt;P&gt;ENDCLASS.                    "zcl_alv_test DEFINITION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Implementation definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS zcl_alv_test IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Constructor&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; create our reference / instance to cl_gui_alv_grid&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CREATE OBJECT grid_container1&lt;/P&gt;&lt;P&gt;        EXPORTING&lt;/P&gt;&lt;P&gt;           container_name = 'CCONTAINER1'.&lt;/P&gt;&lt;P&gt;    CREATE OBJECT  grid1&lt;/P&gt;&lt;P&gt;       EXPORTING&lt;/P&gt;&lt;P&gt;          i_parent = grid_container1.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set event handlers&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;    SET HANDLER z_object-&amp;gt;on_user_command for grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER z_object-&amp;gt;on_toolbar for grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed FOR grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;handle_data_changed_finished FOR grid1.&lt;/P&gt;&lt;P&gt;    SET HANDLER Z_OBJECT-&amp;gt;on_dubbelklik FOR grid1.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;register_edit_event&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_event_id = cl_gui_alv_grid=&amp;gt;mc_evt_enter.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Rest of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD on_dubbelklik.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;dubbelklik&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        e_row     = e_row&lt;/P&gt;&lt;P&gt;        e_column  = e_column&lt;/P&gt;&lt;P&gt;        es_row_no = es_row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                       "on_dubbelklik&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD set_cursor.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_current_cell_via_id&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;        is_row_id     = row_id&lt;/P&gt;&lt;P&gt;        is_column_id  = column_id&lt;/P&gt;&lt;P&gt;        is_row_no  =    row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.&lt;/P&gt;&lt;P&gt;  METHOD  handle_data_changed.&lt;/P&gt;&lt;P&gt;    call method grid1-&amp;gt;get_current_cell&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        e_row     = e1_row&lt;/P&gt;&lt;P&gt;        e_value   = e_value&lt;/P&gt;&lt;P&gt;        e_col     = e1_col&lt;/P&gt;&lt;P&gt;        es_row_id = es_row_id&lt;/P&gt;&lt;P&gt;        es_col_id = es_col_id&lt;/P&gt;&lt;P&gt;        es_row_no = es_row_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    changed_tab  = er_data_changed-&amp;gt;mp_mod_rows.&lt;/P&gt;&lt;P&gt;    inserted_tab = er_data_changed-&amp;gt;mt_inserted_rows.&lt;/P&gt;&lt;P&gt;    deleted_tab  = er_data_changed-&amp;gt;mt_deleted_rows.&lt;/P&gt;&lt;P&gt;    modified_cells_tab = er_data_changed-&amp;gt;mt_mod_cells.&lt;/P&gt;&lt;P&gt;    PERFORM data_changed  IN PROGRAM (caller) IF FOUND&lt;/P&gt;&lt;P&gt;       USING changed_tab&lt;/P&gt;&lt;P&gt;             inserted_tab&lt;/P&gt;&lt;P&gt;             deleted_tab&lt;/P&gt;&lt;P&gt;             modified_cells_tab.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "handle_data_changed&lt;/P&gt;&lt;P&gt;  METHOD handle_data_changed_finished.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "handle_data_changed_finished&lt;/P&gt;&lt;P&gt;  METHOD return_structure.&lt;/P&gt;&lt;P&gt;    lr_rtti_struc ?= cl_abap_structdescr=&amp;gt;DESCRIBE_BY_DATA( my_line ).&lt;/P&gt;&lt;P&gt;    zogt[]  = lr_rtti_struc-&amp;gt;components.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "return_structure&lt;/P&gt;&lt;P&gt;  METHOD create_dynamic_fcat.&lt;/P&gt;&lt;P&gt;    LOOP AT zogt INTO zog.&lt;/P&gt;&lt;P&gt;      CLEAR wa_it_fldcat.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-fieldname = zog-name .&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-dataTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intTYPE = zog-TYPE_kind.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-intlen = zog-length.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-decimals = zog-decimals.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-coltext = zog-name.&lt;/P&gt;&lt;P&gt;      wa_it_fldcat-lowercase = 'X'.&lt;/P&gt;&lt;P&gt;      APPEND wa_it_fldcat TO it_fldcat .&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "create_dynamic_fcat&lt;/P&gt;&lt;P&gt;  METHOD  download_to_excel.&lt;/P&gt;&lt;P&gt;    assign g_outtab1-&amp;gt;* to &amp;lt;fs0&amp;gt;.&lt;/P&gt;&lt;P&gt;    assign g_fldcat1-&amp;gt;* to &amp;lt;fs1&amp;gt;.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION  'LVC_TRANSFER_TO_KKBLO'&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;       it_fieldcat_lvc   = &amp;lt;fs1&amp;gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    is_layout_lvc     = m_cl_variant-&amp;gt;ms_layout&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        is_tech_complete  = ' '&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       es_layout_kkblo   = ls_layout&lt;/P&gt;&lt;P&gt;       et_fieldcat_kkblo = lt_fieldcat.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT lt_fieldcat INTO lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;      CLEAR lt_fieldcat_wa-tech_complete.&lt;/P&gt;&lt;P&gt;      IF lt_fieldcat_wa-tabname IS initial.&lt;/P&gt;&lt;P&gt;        lt_fieldcat_wa-tabname = '1'.&lt;/P&gt;&lt;P&gt;        MODIFY lt_fieldcat FROM lt_fieldcat_wa.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;      l_tabname = lt_fieldcat_wa-tabname.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'ALV_XXL_CALL'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_tabname           = l_tabname&lt;/P&gt;&lt;P&gt;        is_layout           = ls_layout&lt;/P&gt;&lt;P&gt;        it_fieldcat         = lt_fieldcat&lt;/P&gt;&lt;P&gt;        i_title             = sy-title&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        it_outtab           = &amp;lt;fs0&amp;gt;&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        fatal_error         = 1&lt;/P&gt;&lt;P&gt;        no_display_possible = 2&lt;/P&gt;&lt;P&gt;        others              = 3.&lt;/P&gt;&lt;P&gt;    IF  sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      message id sy-msgid TYPE 'S' number sy-msgno&lt;/P&gt;&lt;P&gt;             with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "download_to_excel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD change_title.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_gridtitle&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_gridtitle = i_gridtitle.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "CHANGE_TITLE&lt;/P&gt;&lt;P&gt;  METHOD create_dynamic_table.&lt;/P&gt;&lt;P&gt;    CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        ep_table        = dy_table.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "create_dynamic_table&lt;/P&gt;&lt;P&gt;  METHOD build_dynamic_structures.&lt;/P&gt;&lt;P&gt;    caller = calling_program.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;return_structure&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        my_line = my_line.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;create_dynamic_fcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        it_fldcat = it_fldcat.&lt;/P&gt;&lt;P&gt;    CALL METHOD me-&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        dy_table  = dy_table.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "build_dynamic_structures&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD display_grid.&lt;/P&gt;&lt;P&gt;    GET REFERENCE OF g_outtab INTO g_outtab1.&lt;/P&gt;&lt;P&gt;    GET REFERENCE OF g_fldcat INTO g_fldcat1.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-edit = 'X'. "To enable editing in ALV&lt;/P&gt;&lt;P&gt;    struct_grid_lset-grid_title = 'TEST ALV USE generic class'.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-ctab_fname = 'T_CELLCOLORS'.&lt;/P&gt;&lt;P&gt;    struct_grid_lset-stylefname = 'CELLTAB'.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_ready_for_input&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        i_ready_for_input = '1'.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;set_table_for_first_display&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        is_layout       = struct_grid_lset&lt;/P&gt;&lt;P&gt;      CHANGING&lt;/P&gt;&lt;P&gt;        it_outtab       = gt_outtab&lt;/P&gt;&lt;P&gt;        it_fieldcatalog = it_fldcat.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "display_grid&lt;/P&gt;&lt;P&gt;  METHOD on_user_command.&lt;/P&gt;&lt;P&gt;    CASE e_ucomm.&lt;/P&gt;&lt;P&gt;      WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;        LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;      WHEN 'EXCEL'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;download_to_excel.&lt;/P&gt;&lt;P&gt;      WHEN 'SAVE'.&lt;/P&gt;&lt;P&gt;      WHEN 'PROC'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;process.&lt;/P&gt;&lt;P&gt;      WHEN 'REFR'.&lt;/P&gt;&lt;P&gt;        CALL METHOD me-&amp;gt;refresh.&lt;/P&gt;&lt;P&gt;    ENDCASE.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.  "on_user_command&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD on_toolbar.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;customize this section with your own Buttons&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;When a button is pressed method ON_USER_COMMAND is entered&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;   toolbar_funcs 'EXIT'  icon_system_end            'Click2exit'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'SAVE'  icon_system_save           'Savedata'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'EDIT'  icon_toggle_display_change 'Edit data'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'PROC'  icon_businav_process       'Process'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'EXCEL' icon_xxl                   'Excel'.&lt;/P&gt;&lt;P&gt;   toolbar_funcs 'REFR'  icon_refresh               'Refresh'.&lt;/P&gt;&lt;P&gt;   ENDMETHOD.                    "on_toolbar&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD refresh_grid.&lt;/P&gt;&lt;P&gt;    CALL METHOD cl_gui_cfw=&amp;gt;flush.&lt;/P&gt;&lt;P&gt;    CALL METHOD grid1-&amp;gt;refresh_table_display.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "refresh_grid&lt;/P&gt;&lt;P&gt;  METHOD refresh.&lt;/P&gt;&lt;P&gt;    PERFORM refresh IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "refresh&lt;/P&gt;&lt;P&gt;  METHOD process.&lt;/P&gt;&lt;P&gt;    PERFORM process IN PROGRAM (caller) IF FOUND.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "process&lt;/P&gt;&lt;P&gt;  METHOD dubbelklik.&lt;/P&gt;&lt;P&gt;    perform dubbelklik IN PROGRAM (caller) IF FOUND&lt;/P&gt;&lt;P&gt;       USING e_row&lt;/P&gt;&lt;P&gt;             e_column&lt;/P&gt;&lt;P&gt;             es_row_no.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "dubbelklik&lt;/P&gt;&lt;P&gt;ENDCLASS.                    "zcl_alv_test IMPLEMENTATION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now for example I can use this program to fill a grid&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Program  ZJIMBOTESTX.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;INCLUDE ZZJIMBOXX_INCL.  "Code is above&lt;/P&gt;&lt;P&gt;TABLES : SPFLI.&lt;/P&gt;&lt;P&gt;TYPES:  BEGIN OF s_elements.&lt;/P&gt;&lt;P&gt;        INCLUDE  STRUCTURE spfli..&lt;/P&gt;&lt;P&gt;TYPES: END OF    s_elements.&lt;/P&gt;&lt;P&gt;DATA:&lt;/P&gt;&lt;P&gt;       t_elements         TYPE TABLE OF s_elements,  "refers to our ITAB&lt;/P&gt;&lt;P&gt;       my_line            TYPE s_elements.&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;CALL SCREEN 100.&lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt;MODULE status_0100 OUTPUT.&lt;/P&gt;&lt;P&gt;CREATE OBJECT z_object&lt;/P&gt;&lt;P&gt;      EXPORTING z_object = z_object.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;build_dynamic_structures&lt;/P&gt;&lt;P&gt;     EXPORTING&lt;/P&gt;&lt;P&gt;       my_line = my_line&lt;/P&gt;&lt;P&gt;       calling_program = sy-repid&lt;/P&gt;&lt;P&gt;     IMPORTING&lt;/P&gt;&lt;P&gt;       dy_table = dy_table&lt;/P&gt;&lt;P&gt;     CHANGING&lt;/P&gt;&lt;P&gt;       it_fldcat = it_fldcat.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Here before displaying you can change the field catalog to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;adjust your own column names.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*col_name  col-nr 'your name' output length.&lt;/P&gt;&lt;P&gt;   col_name 2 'Carrier' 5.&lt;/P&gt;&lt;P&gt;   col_name 3 'Flt' 4.&lt;/P&gt;&lt;P&gt;   col_name 4 'Dep Ctry' 8.&lt;/P&gt;&lt;P&gt;   col_name 5 'Dep City'  8.&lt;/P&gt;&lt;P&gt;   col_name 6 'Airport'  6.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill dynmic table and display&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;PERFORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt;is_layout-zebra = 'X'.&lt;/P&gt;&lt;P&gt; CALL METHOD z_object-&amp;gt;display_grid&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      g_outtab = &amp;lt;dyn_table&amp;gt;&lt;/P&gt;&lt;P&gt;      g_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;     CHANGING&lt;/P&gt;&lt;P&gt;      it_fldcat = it_fldcat&lt;/P&gt;&lt;P&gt;      gt_outtab = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;  SET PF-STATUS '0001'.&lt;/P&gt;&lt;P&gt;  SET TITLEBAR '000'.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;MODULE user_command_0100 INPUT.&lt;/P&gt;&lt;P&gt;  CASE sy-ucomm.&lt;/P&gt;&lt;P&gt;    WHEN 'BACK'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'EXIT'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN 'RETURN'.&lt;/P&gt;&lt;P&gt;      LEAVE PROGRAM.&lt;/P&gt;&lt;P&gt;    WHEN OTHERS.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;ENDMODULE.&lt;/P&gt;&lt;P&gt;FORM populate_dynamic_itab.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt; SELECT *&lt;/P&gt;&lt;P&gt;       UP TO 200 rows&lt;/P&gt;&lt;P&gt;       FROM SPFLI&lt;/P&gt;&lt;P&gt;       INTO  CORRESPONDING FIELDS OF TABLE &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; save a copy (original table). Use same fcat as ist table.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create 2nd Dyn table to hold original data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;CALL METHOD cl_alv_table_create=&amp;gt;create_dynamic_table&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;         it_fieldcatalog = it_fldcat&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;         ep_table = dy_table.&lt;/P&gt;&lt;P&gt; ASSIGN dy_table-&amp;gt;* TO &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; CREATE DATA dy_line LIKE LINE OF &amp;lt;orig_table&amp;gt;.&lt;/P&gt;&lt;P&gt; ASSIGN dy_line-&amp;gt;* TO &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;P&gt;  &amp;lt;orig_table&amp;gt; = &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM DATA_CHANGED&lt;/P&gt;&lt;P&gt;   USING&lt;/P&gt;&lt;P&gt;     changed_tab&lt;/P&gt;&lt;P&gt;     inserted_tab&lt;/P&gt;&lt;P&gt;     deleted_tab&lt;/P&gt;&lt;P&gt;     modified_cells_tab.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM process.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Orig table is in dynamic table &amp;lt;orig_table&amp;gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ALV GRID changed table is in &amp;lt;dyn_table&amp;gt;.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Loop AT &amp;lt;orig_table&amp;gt;  INTO  &amp;lt;dyn_wa&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Do what you want&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;end&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt; ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM refresh.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;change data for example delete some lines.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*DELETE  &amp;lt;dyn_table&amp;gt; from 1 to 16.&lt;/P&gt;&lt;P&gt;CALL METHOD z_object-&amp;gt;refresh_grid.&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;FORM dubbelklik&lt;/P&gt;&lt;P&gt;     USING&lt;/P&gt;&lt;P&gt;        e_row       TYPE lvc_s_row&lt;/P&gt;&lt;P&gt;        e_column    TYPE lvc_s_col&lt;/P&gt;&lt;P&gt;        es_row_no   TYPE  lvc_s_roid.&lt;/P&gt;&lt;P&gt;     SET TITLEBAR '001'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     i_gridtitle = 'Grid Title Changed'.&lt;/P&gt;&lt;P&gt;     CALL METHOD  z_object-&amp;gt;change_title&lt;/P&gt;&lt;P&gt;         EXPORTING&lt;/P&gt;&lt;P&gt;         i_gridtitle = i_gridtitle.&lt;/P&gt;&lt;P&gt;    PERFORM refresh.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; CALL METHOD z_object-&amp;gt;set_cursor&lt;/P&gt;&lt;P&gt;   EXPORTING&lt;/P&gt;&lt;P&gt;       row_id     = e_row&lt;/P&gt;&lt;P&gt;       column_id  = e_column&lt;/P&gt;&lt;P&gt;        row_no  = es_row_no.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now yoy can sort / delete / insert / or wahtever.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code is pretty general so it should cover all your needs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All your application ever needs to do is simply define a structure and fill it.The class will generate the dynamic table and FCAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Modify the class to rmeove toolbar buttons wuou don't use or need.&lt;/P&gt;&lt;P&gt;This class aslo includes a download to EXCEL  with column headings which I often find useful.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't bother with mt_good cells etc etc as you can manipulate the &amp;lt;dyn_table&amp;gt; directly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Jimbo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Aug 2007 13:17:48 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678428#M618928</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2007-08-24T13:17:48Z</dc:date>
    </item>
    <item>
      <title>Re: ALV wrong row_id in  METHOD handle_data_changed when grid is sorted</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678429#M618929</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jimbo,&lt;/P&gt;&lt;P&gt;thanks a lot for your help.&lt;/P&gt;&lt;P&gt;Our application runs now since more than a year and we use the ALV functionalty quiet deep. Due to our strict change procedure and necessary effort I will not be able to switch to your smart class.&lt;/P&gt;&lt;P&gt;My intention was to find an easy solution, which can be implemented quickly and where the tests can be restricted just to the changed matter. To implement your class would mean to us, that the whole report would have to be tested from scratch.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would be very thankful for an easier solution, which would avoid the autosort for a while or similar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nevertheless thanks a lot for your suggestion.&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;Horst&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 27 Aug 2007 07:12:48 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678429#M618929</guid>
      <dc:creator>horst_winter</dc:creator>
      <dc:date>2007-08-27T07:12:48Z</dc:date>
    </item>
    <item>
      <title>Re: ALV wrong row_id in  METHOD handle_data_changed when grid is sorted</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678430#M618930</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Any answer received ? because it occurs that we do have the same kind of problem here ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thx for the feedback&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Mar 2010 10:43:56 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/alv-wrong-row-id-in-method-handle-data-changed-when-grid-is-sorted/m-p/2678430#M618930</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2010-03-04T10:43:56Z</dc:date>
    </item>
  </channel>
</rss>

