2 つのビューステートを作成する必要があります。1 つは並べ替え方向用で、もう 1 つは並べ替え中にチェックするための並べ替え式用です。
まず、並べ替え方向はグリッドビューから「昇順」および「降順」として取得されます。データテーブルでデータをファイラーする場合は、グリッドビューの並べ替え方向を渡し、値に応じて「ASC」および「DESC」を使用する必要があります。データブルのソート。
次に、並べ替え方向を渡して反転させる反転機能です。列を最初にクリックしたときに使用されます。たとえば、「ASC」を並べ替えます。次に、2回目にクリックする必要があります。 「DESC」だからひっくり返します。
3 番目に、Viewstates を使用して、前の並べ替えの値を保留します。
4番目に、PageIndexChangingイベントのソートデータテーブルを保持するビューステートを作成します。もちろん、ビューステートがnullかどうかを確認する必要があります。データをフェッチしてバインドする必要があります。そうでない場合は、グリッドビューをソートされたデータテーブルにバインドする必要があります。
protected void GridView_Users_Sorting(object sender, GridViewSortEventArgs e)
{
if (String.IsNullOrEmpty(ViewState["sortExpression"].ToString()) && String.IsNullOrEmpty(ViewState["sortDirection"].ToString()))
{
//Sort and bind data as ASCENDING for the first time
DefaultSortBind(e);
}
else
{
if (ViewState["sortExpression"].ToString() == e.SortExpression.ToString())
{
string sortDirection = string.Empty;
if (ViewState["sortDirection"].ToString() == e.SortDirection.ToString())
{
sortDirection = flipSortDirection(GetSortDirection(e.SortDirection.ToString()));
}
else
{
sortDirection = GetSortDirection(e.SortDirection.ToString());
}
DataTable dt = new UserInfoTableTableAdapter().GetData();
dt.DefaultView.Sort = e.SortExpression + " " + sortDirection;
GridView_Users.DataSource = dt.DefaultView;
GridView_Users.DataBind();
ViewState["sortedDt"] = dt.DefaultView.ToTable();
ViewState["sortDirection"] = sortDirection;
}
else
{
//Sort and bind data as ASCENDING
DefaultSortBind(e);
}
}
}
private void DefaultSortBind(GridViewSortEventArgs e)
{
ViewState["sortExpression"] = e.SortExpression;
ViewState["sortDirection"] = e.SortDirection;
//Fetch data again, because if we try to get data from gridview it will give null
DataTable dt = new UserInfoTableTableAdapter().GetData();
dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortDirection.ToString());
GridView_Users.DataSource = dt.DefaultView;
GridView_Users.DataBind();
ViewState["sortedDt"] = dt.DefaultView.ToTable();
}
//Get sort direction
private string GetSortDirection(string sortDirection)
{
if (sortDirection == "Ascending")
{
return "ASC";
}
else
{
return "DESC";
}
}
//Flip sort direction
private string flipSortDirection(string sortDirection)
{
if (sortDirection == "ASC")
{
return "DESC";
}
else
{
return "ASC";
}
}