Я столкнулся с этой проблемой, а также. Вот как я его исправил. (В моем примере gridview сортируется по столбцу с именем submit date).
a. Когда базовый dataTable gridview разбит и отсортирован, сохраните его в переменной сеанса. Фокус в том, что перед сохранением переменной сеанса убедитесь, что вы сохранили отсортированное представление.
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.
b. затем выполните все операции редактирования/обновления, используя данные, сохраненные в сеансе на предыдущем шаге. Он всегда будет отображаться в правильном порядке сортировки, и вы не увидите неожиданно меняющегося изменения индекса строки после обновления.