I have tried this, or not, when I show ALV, manual sorting editable field, modify the data after the refresh, it would still be in accordance with the manual sorting order, when will I revised data to other position, below is my code:
FORM user_command USING ucomm LIKE sy-ucomm "接收用户的命令
selfield TYPE slis_selfield.
READ TABLE i_output INDEX selfield-tabindex.
CHECK sy-subrc = 0.
DATA: wl_answer TYPE c.
DATA: is_stable TYPE lvc_s_stbl .
* DATA ds_sort1 TYPE lvc_S_sort.
DATA: ds_sort1 LIKE TABLE OF lvc_s_sort WITH HEADER LINE.
DATA: l_guid TYPE REF TO cl_gui_alv_grid.
DATA stbl TYPE lvc_s_stbl. "稳定刷新
* stbl-row = 'X'." 基于行的稳定刷新
* stbl-col = 'X'." 基于列稳定刷 新
DATA:ls_row TYPE lvc_s_row,
ls_col TYPE lvc_s_col.
DATA: pt_exclude TYPE ui_functions .
DATA : gt_exclude TYPE ui_functions.
DATA: ls_exclude TYPE ui_func.
DATA gs_layout TYPE lvc_s_layo .
DATA gt_fieldcat TYPE lvc_t_fcat .
DATA: l_grid TYPE REF TO cl_gui_alv_grid.
DATA: g_grid TYPE REF TO cl_gui_alv_grid.
DATA: lt_sort TYPE slis_t_sortinfo_alv.
*------------将ALV上修改的内容保存到内表--------------------------------
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = l_grid.
CALL METHOD l_grid->check_changed_data.
DATA: lt_excl_func TYPE ui_functions.
th_layout-no_toolbar = 'X' .
* CALL METHOD l_grid->set_table_for_first_display
* EXPORTING
* is_layout = th_layout
* i_buffer_active = 'X'
* it_toolbar_excluding = pt_exclude
* CHANGING
** it_sort = ds_sort1[]
* it_outtab = i_output[]
** it_fieldcatalog = i_fieldcat
* EXCEPTIONS
* invalid_parameter_combination = 1
* program_error = 2
* too_many_lines = 3
* OTHERS = 4.
* CALL METHOD l_grid->get_sort_criteria
* IMPORTING
* et_sort = ds_sort1.
CASE ucomm.
WHEN '&IC1'.
CASE selfield-sel_tab_field.
WHEN 'I_OUTPUT-LIFNR'.
PERFORM sel_lifnr USING ztype.
IF zlifnr <> '' .
i_output-lifnr = i_pb77-llief .
ENDIF .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_output-lifnr
IMPORTING
output = i_output-lifnr.
SELECT SINGLE sortl FROM lfa1 INTO i_output-sortl WHERE lifnr = i_output-lifnr.
*
MODIFY i_output INDEX selfield-tabindex.
* selfield-refresh = 'X'.
PERFORM alv_refresh CHANGING selfield-col_stable
selfield-row_stable
selfield-refresh.
CLEAR zlifnr.
ENDCASE.
WHEN 'ALL'.
PERFORM select_all.
PERFORM alv_refresh CHANGING selfield-col_stable
selfield-row_stable
selfield-refresh.
WHEN 'UNALL'.
PERFORM cancle_all.
PERFORM alv_refresh CHANGING selfield-col_stable
selfield-row_stable
selfield-refresh.
ENDCASE.
is_stable-row = 'X'.
is_stable-col = 'X'.
CALL METHOD l_grid->refresh_table_display
EXPORTING
is_stable = is_stable
* i_soft_refresh = ''
EXCEPTIONS
finished = 1
OTHERS = 2.