[转]Gridview自定义排序且显示上下箭头
//设置Gridview的AllowSorting属性值为true,即允许排序
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False" EmptyDataText="没有相关记录!" AllowSorting="True" OnSorting="gridview1_Sorting" OnRowCreated="gridview1_RowCreated" >
</asp:GridView>
//为要排序的列加上SortExpression属性,其值为绑定的字段,如:
<asp:BoundField DataField="ID" HeaderText="序号" SortExpression="ID">
//添加Sorting和RowCreated事件
<asp:GridView ID="gridview1" runat="server" AutoGenerateColumns="False" EmptyDataText="没有相关记录!" AllowSorting="True" OnSorting="gridview1_Sorting" OnRowCreated="gridview1_RowCreated" >
</asp:GridView>
后台代码,创建如下方法:
//设置默认表达式和排序顺序,放到page_load事件中
public void SetSorting()
{
ViewState["SortExpression"] = "ID";
ViewState["SortDirection"] = SortDirection.Descending;
}
//获取排序列索引
private int GetSortColumnIndex()
{
foreach (DataControlField field in gridview1.Columns)
{
if (field.SortExpression == ViewState["SortExpression"].ToString().Trim())
return gridview1.Columns.IndexOf(field);
}
return -1;
}
//添加排序图片
private void AddSortImage(int columnIndex, GridViewRow headerRow)
{
Image sortImage = new Image();
if ((SortDirection)ViewState["SortDirection"] == SortDirection.Ascending)
{
sortImage.ImageUrl ="向上箭头图片的路径";
}
else
{
sortImage.ImageUrl = "向下箭头图片的路径";
}
headerRow.Cells[columnIndex].Controls.Add(sortImage);
}
//Gridview的Sorting事件
protected void gridview1_Sorting(object sender, GridViewSortEventArgs e)
{
if (ViewState["SortExpression"].ToString().Trim() == e.SortExpression)
{
if ((SortDirection)ViewState["SortDirection"] == SortDirection.Ascending)
ViewState["SortDirection"] = SortDirection.Descending;
else
ViewState["SortDirection"] = SortDirection.Ascending;
}
else
{
ViewState["SortExpression"] = e.SortExpression;
ViewState["SortDirection"] = SortDirection.Descending;
}
//你绑定Gridview数据的函数
GvBind();
}
//Gridview的RowCreated事件
protected void gridview1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
int sortColumnIndex = GetSortColumnIndex();
if (sortColumnIndex != -1)
AddSortImage(sortColumnIndex, e.Row);
}
}
最后,还要修改GvBind()函数中的SQL语句
//将SortDirection转化为SQL语句中的ASC和DESC
string sortStr = ((SortDirection)ViewState["SortDirection"] == SortDirection.Descending ? "DESC" : "");
在原SQL语句后加上order by语句: "order by "+ ViewState["SortExpression"]+" "+sortStr