gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)




GridView控件提供了用于实现排序功能的接口,通过设置相关属性并实现排序事件的处理程序就可以完成排序功能。我们将在【例8-4】提供的界面的基础上实现排序功能。

【例8-5】演示为GridView控件实现排序。

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

gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)_第1张图片

除了AllowSorting属性,还必须设置作为排序关键字的列的SortExpression属性,这是因为,GridView中可以包含按钮列,按钮列一般并不映射到某个数据字段,而排序必须以某个字段作为排序关键字才能完成。

(2) 在GridView控件的便捷任务面板中选择【编辑列】选项,选择可以作为排序关键字的列,设置其SortExpression属性为排序字段名,如图8-19所示。

gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)_第2张图片

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

gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)_第3张图片

 

(3) 为GridView控件设置排序事件处理方法,如图8-21所示。
gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)_第4张图片

GridView的排序功能通过响应排序事件在后台生成已排序的数据源,然后重新绑定数据来完成,因此,需要在事件响应代码中获取排序字段名和排序方式(升序、降序),然后据此对数据源进行排序后重新绑定数据。

(4) 为排序事件处理方法添加如下代码,代码中用一个ViewState["SortDirection"]来记录当前的排列顺序,用一个ViewState["SortExpression"]记录作为排序关键字的字段名,然后重新绑定数据。

  
  
  
  
  1. protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)  
  2. {  
  3.     if(ViewState["SortDirection"] == null) ViewState["SortDirection"] = "DESC";  
  4.     if (ViewState["SortDirection"] .ToString() == "ASC")  
  5.         ViewState["SortDirection"] = "DESC";  
  6.     else  
  7.         ViewState["SortDirection"] = "ASC";  
  8.     ViewState["SortExpression"] = e.SortExpression;  
  9.     this.bindgrid();  

添加bindgrid()代码如下,使其根据ViewState["SortDirection"]的值生成排序后的DataView对象作为数据源。

  
  
  
  
  1. void bindgrid()  
  2.     {  
  3.         string sqlconnstr =  
  4. ConfigurationManager.ConnectionStrings[" ConnectionString"].ConnectionString; ;  
  5.         DataSet ds = new DataSet();  
  6.         using (SqlConnection sqlconn = new SqlConnection(sqlconnstr))  
  7.         {  
  8.             SqlDataAdapter sqld = new SqlDataAdapter ("select no,name,birth,address from student",  
  9.            sqlconn);  
  10.             sqld.Fill(ds, "tabstudent");  
  11.         }  
  12.         //判断是否已经进行排序,如果是则按照ViewState中 存储的信息生成排序后的DataView  
  13.         对象  
  14.         if (ViewState["SortDirection"] == null)  
  15.             GridView1.DataSource = ds.Tables["tabstudent"].DefaultView;  
  16.         else  
  17.         {  
  18.             DataView SortedDV = new DataView(ds.Tables["tabstudent"]);  
  19.             SortedDV.Sort = ViewState["SortExpression"].ToString() + " " +  
  20.          ViewState["SortDirection"].ToString();  
  21.             GridView1.DataSource = SortedDV;  
  22.         }  
  23.         GridView1.DataBind();  
  24.     } 

(5) 排序效果如图8-22所示。

gridview 实现排序 (在不是使用sqlDataSource控件,而在后台编码绑定gridview时,指定那个字段排序时使用。本例用了单层结构,可修改后应用于多层)_第5张图片

你可能感兴趣的:(gridview编码按字段排序)