gridview如果使用sqldatasource绑定数据集的话分页只需将gridview 属性设置为 AllowSorting="True" 即可,但是如果采用其它数据源绑定属性 AutoGenerateColumns 如果设置为false 那么上面的排序方法则行不通。必须自定义排序。
页面 gridview 设置 如下:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" OnSorting="GridView1_Sorting"></asp:GridView>
后台cs代码
重点步骤:自定义GridView1_Sorting事件
第一,添加一个属性
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection) ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
GridViewSortDirection 是一个简单的属性,用viewstate保存每次排序的方向
第二,GridView1_Sorting事件代码
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
if (GridViewSortDirection == SortDirection.Ascending)
{
GridViewSortDirection = SortDirection.Descending;
SortGridView(sortExpression, DESCENDING);
}
else
{
GridViewSortDirection = SortDirection.Ascending;
SortGridView(sortExpression, ASCENDING);
}
}
在这里,首先得到用户点击要排序列的标题,然后判断当前gridviewsortdirection的属性值来判断,如果已经是升序的话,则设置GridViewSortDirection为降序,并调用一个sortgridview过程;否则默认是调用升序来排序;
第三,SortGridView方法,显示排序后的列表
private void SortGridView(string sortExpression,string direction)
{
DataTable dt = GetData().Tables[0];
DataView dv = new DataView(dt);
dv.Sort = sortExpression + direction;
GridView1.DataSource = dv;
GridView1.DataBind();
}
在这里,接收两个参数,分别是sortExpression和direction,然后构成dataview进行排序。