GridView点击表头排序
示例
GridView本身有一个Sort()函数:
public virtual void Sort ( string sortExpression, SortDirection sortDirection) ---排序数据列和排序方向
使用上相当方便。但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发:
protected void GridView_Sorting(object sender, GridViewSortEventArgs e)事件。从GridViewSortEventArgs中可以拿到SortDirection和SortExpression。
使用DataView.Sort属性来排序,(Sort方法会触发Sorting 事件),再重新绑定到GridView上。
1、在源码中给GridView中加入AllowSorting属性
<asp:GridView ID="Grd" AllowSorting="True" OnSorting="Grd_Sorting" >
1.1 需要设定排序的列都要加SortExpression属性
<asp:BoundField DataField="Hot" HeaderText="热度" SortExpression="Hot"> <ItemStyle Width="65px" /> </asp:BoundField>
2. 定义排序列和排序方向属性,此属性用viewstate保存
/// <summary> /// 排序列 /// </summary> public string SortOrder { get { return ViewState["SortOrder"].ToString(); } set { ViewState["SortOrder"] = value; } }
/// <summary> /// 排序方式 /// </summary> public string OrderDire { get { return ViewState["OrderDire"].ToString(); } set { ViewState["OrderDire"] = value; } }
3.Page_Load里面加载
this.SortOrder = "Hot";//默认的排序列 --"Hot"为自定义默认列 this.OrderDire = "Desc";//默认排序方式 --排序方式Desc和ASC
4. 绑定数据源 public void BindGrid(object sender, EventArgs e)
DataTable dt = new DataTable();
dt = gift.QueryGift(giftName, giftSpec, giftType, giftDesc, giftActive); DataView dataView = dt.DefaultView; string sort = SortOrder + " " + OrderDire; dataView.Sort = sort; Grd.DataSource = dataView; //将DataView绑定到GridView上 Grd.DataBind(); 5.Grd_Sorting 方法
/// <summary> /// 排序 /// </summary> protected void Grd_Sorting(object sender, GridViewSortEventArgs e) { string sortExpression = e.SortExpression; //获取排序的列
if (ViewState["SortOrder"].ToString() == sortExpression) { //默认的排序列Name if (ViewState["OrderDire"].ToString() == "Desc") { ViewState["OrderDire"] = "ASC"; } else { ViewState["OrderDire"] = "Desc"; } } else { //其他列的排序 ViewState["SortOrder"] = e.SortExpression; }
BindGrid(this, EventArgs.Empty);
}