Я тоже столкнулся с этой проблемой. Вот как я это исправил. (В моем примере вид сетки отсортирован по столбцу с именем отправки).
а. Когда базовый dataTable таблицы grid будет создан и отсортирован, сохраните его в переменной сеанса. Хитрость заключается в том, что перед сохранением в переменную сеанса убедитесь, что вы сохранили отсортированное представление.
dt.DefaultView.Sort = "Submit Date" + " " + "DESC";
GridView1.DataSource = dt;
GridView1.DataBind();
Session["gridViewData"] = dt.DefaultView.ToTable(); //Only storing dt will not have the sorted table stored in session.
б. Затем выполните все операции редактирования / обновления, используя таблицу данных, сохраненную в сеансе на предыдущем шаге. Он всегда будет отображаться в правильно отсортированном порядке, и вы не увидите, как после обновления обновится индекс строки.