演示为GridView控件实现排序。
(1) 在【例8-4】中的GridViewBingding_2.aspx页面中设置GridView控件的属性AllowSorting=True,如图8-18所示。

除了AllowSorting属性,还必须设置作为排序关键字的列的SortExpression属性,这是因为,GridView中可以包含按钮列,按钮列一般并不映射到某个数据字段,而排序必须以某个字段作为排序关键字才能完成。
(2) 在GridView控件的便捷任务面板中选择【编辑列】选项,选择可以作为排序关键字的列,设置其SortExpression属性为排序字段名,如图8-19所示。

这时,作为排序关键字的列的列名变为超链接样式,如图8-20所示。

(3) 为GridView控件设置排序事件处理方法,如图8-21所示。

GridView的排序功能通过响应排序事件在后台生成已排序的数据源,然后重新绑定数据来完成,因此,需要在事件响应代码中获取排序字段名和排序方式(升序、降序),然后据此对数据源进行排序后重新绑定数据。
(4) 为排序事件处理方法添加如下代码,代码中用一个ViewState["SortDirection"]来记录当前的排列顺序,用一个ViewState["SortExpression"]记录作为排序关键字的字段名,然后重新绑定数据。
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { if(ViewState["SortDirection"] == null)
ViewState["SortDirection"] = "DESC"; if (ViewState["SortDirection"] .ToString() == "ASC") ViewState["SortDirection"] = "DESC"; else ViewState["SortDirection"] = "ASC"; ViewState["SortExpression"] = e.SortExpression; this.bindgrid();
添加bindgrid()代码如下,使其根据ViewState["SortDirection"]的值生成排序后的DataView对象作为数据源。
void bindgrid() { string sqlconnstr = ConfigurationManager.ConnectionStrings["
ConnectionString"].ConnectionString; ; DataSet ds = new DataSet(); using (SqlConnection sqlconn = new SqlConnection(sqlconnstr)) { SqlDataAdapter sqld = new SqlDataAdapter
("select no,name,birth,address from student", sqlconn); sqld.Fill(ds, "tabstudent"); } //判断是否已经进行排序,如果是则按照ViewState中
存储的信息生成排序后的DataView 对象 if (ViewState["SortDirection"] == null) GridView1.DataSource = ds.Tables["tabstudent"].DefaultView; else { DataView SortedDV = new DataView(ds.Tables["tabstudent"]); SortedDV.Sort = ViewState["SortExpression"].ToString() + " " + ViewState["SortDirection"].ToString(); GridView1.DataSource = SortedDV; } GridView1.DataBind(); }
(5) 排序效果如图8-22所示。

本文作者:俊驰 来源:CSDN博客
CIO之家 www.ciozj.com 微信公众号:imciow