Вы должны сделать это программно - хотя решение несколько неприятное.
Первым шагом является определение DataKeys и onSorting и Sorted событий в ListView, как показано ниже
<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="AddressId,AddressLine1"
onsorting="ListView1_Sorting" onsorted="ListView1_Sorted">
Тогда в коде позади вы должны обработать события. Так как DataItems в коллекции Items всегда нулевые, а DataIndex и DisplayIndex не установлены, как обычно можно ожидать, мы должны использовать DataKeys.Store datakey выбранного Item перед сортировкой и после сортировки ищите в коллекции DatakEy, чтобы соответствовать сохраненному ключу данных. Смотри ниже
private DataKey dk;
protected void ListView1_Sorting(object sender, ListViewSortEventArgs e)
{
dk= (ListView1.SelectedIndex > 0) ? ListView1.DataKeys[ListView1.SelectedIndex] : null;
}
protected void ListView1_Sorted(object sender, EventArgs e)
{
if (dk == null) return;
int i;
ListView1.DataBind();
for (i = 0; i < ListView1.DataKeys.Count; i++)
if(AreEqual(ListView1.DataKeys[i].Values,dk.Values)) break;
if (i >= ListView1.DataKeys.Count) return;
ListView1.SelectedIndex =i;
}
private bool AreEqual(System.Collections.Specialized.IOrderedDictionary x, System.Collections.Specialized.IOrderedDictionary y)
{
for (int i = 0; i < x.Count; i++)
if (!x[i].Equals(y[i])) return false;
return true;
}