Получите SelectedDataKey.Value перед сортировкой (OnSorting?).Затем после сортировки (OnSorted?) Используйте что-то вроде:
foreach(var row in GridView1.Rows)
{
var i = Convert.ToInt32(ViewState["MySavedSelectedDataKey"]));
if(GridView1.DataKeys[row.RowIndex].Value == i)
{
GridView1.SelectedIndex = row.RowIndex;
break;
}
}
Возможно, вам придется снова вызвать DataBind (), чтобы показать новый набор SelectedIndex.
Я не верю, что тамв любом случае, чтобы сделать это, не проходя через каждый ряд.Но если у вас есть страничная страничка, то вам нужно только просмотреть количество строк в свойстве PageSize, а не каждую строку, возвращенную из базы данных.