Возможно, это будет пари, похороненная здесь, но решение, которое я придумала, прекрасно подходит для моей ситуации:
Событие загрузки формы выглядит следующим образом:
private DataTable DataTable1;
protected void Page_Load(object sender, EventArgs e)
{
DataTable1 = GetDataFromDatabase();
this.GridView1.DataSource = DataTable1.DefaultView;
this.GridView1.DataBind();
}
Добавить два скрытых поля на страницу:
<asp:HiddenField runat="server" ID="lastSortDirection" />
<asp:HiddenField runat="server" ID="lastSortExpression" />
Добавьте следующее в ваш asp: объект GridView:
AllowSorting="True" OnSorting="GridView1_Sorting"
Использовать следующее событие сортировки GridView
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
if (lastSortExpression.Value == e.SortExpression.ToString())
{
if (lastSortDirection.Value == SortDirection.Ascending.ToString())
{
e.SortDirection = SortDirection.Descending;
}
else
{
e.SortDirection = SortDirection.Ascending;
}
lastSortDirection.Value = e.SortDirection.ToString();
lastSortExpression.Value = e.SortExpression;
}
else
{
lastSortExpression.Value = e.SortExpression;
e.SortDirection = SortDirection.Ascending;
lastSortDirection.Value = e.SortDirection.ToString();
}
DataView dv = DataTable1.DefaultView;
if (e.SortDirection == SortDirection.Ascending)
{
dv.Sort = e.SortExpression;
}
else
{
dv.Sort = e.SortExpression + " DESC";
}
DataTable1 = dv.ToTable();
GridView1.DataSource = DataTable1.DefaultView;
GridView1.DataBind();
}
Теперь каждый столбец в моем виде сетки сортируется без необходимости каких-либо дальнейших изменений, если какой-либо из столбцов изменяется.