最近在維護一個N年老項目,想着在Gridview 設定 AllowSorting="true" 但排序還不管用。
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False"
CellPadding="4" CssClass ="gridview"
onpageindexchanging="GridView1_PageIndexChanging" PageSize="20"
EnableSortingAndPagingCallbacks ="false" Width="97%"
AllowSorting="true"
OnSorting="GvList_Sorting"
>
後來,發現必須指定要排序的列才行的。 這樣的列頭下面滑鼠移動上去就會出現一個下滑列。
protected void GvList_Sorting(object sender, GridViewSortEventArgs e)
{
Console.WriteLine("單擊排序。。。");
string sortExpression = e.SortExpression;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, "desc");
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, "asc");
}
}
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
private void SortGridView(string sortExpression, string direction)
{
DataTable dataTable = ((DataSet)GridView1.DataSource).Tables[0];
//dataTable.DefaultView.Sort = "Id DESC";//按Id倒序
//dataTable.DefaultView.Sort = "Id DESC,Name desc";//按Id倒序和Name倒序
dataTable.DefaultView.Sort = sortExpression+" "+ direction;//按Id倒序
dataTable = dataTable.DefaultView.ToTable();
GridView1.DataSource = dataTable;
GridView1.DataBind();
}