- ASP.NET開發技巧精講
- 黃鳴
- 418字
- 2019-01-02 02:29:00
2.7 表頭雙向排序
排序也是一個重要的功能,我們希望單擊數據表的表頭標題能排序,并且再次單擊能排回來,單擊“屬性”菜單,設置行為AllowSorting的值為True即可,如圖2-18所示。

圖2-18 設置排序屬性
這樣并沒有完成,不然就會報錯:GridView“GridView1”激發了未處理的事件“Sorting”。
同分頁的道理一樣,雙擊Sorting,系統為我們添加了如下代碼:
protectedvoid GridView1_Sorting(object sender, GridViewSortEventArgs e) { }
相比分頁,排序的代碼就要復雜的多,其實排序的原理就是利用DataView的Sort屬性,類似于拼湊SQL語句,頁面的開始在ViewState中存儲主鍵和排序,默認是“升序”,ViewState["OrderDire"]="ASC";,由于單擊標題我們希望能“排”回來,所以要在分頁事件中添加ViewState["OrderDire"]="Desc";,全部代碼如下所示。
SqlConnection sqlcon; string strCon=ConfigurationManager.ConnectionStrings[ "SQLCONN" ].ToString(); protectedvoid Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["SortOrder"]="員工編號"; ViewState["OrderDire"]="ASC"; bind(); } } //綁定 publicvoid bind() { string sqlstr="select top 20 員工編號,身份證號碼,姓名,性別,地址 from 章立民工 作室"; sqlcon=newSqlConnection(strCon); SqlDataAdapter myda=newSqlDataAdapter(sqlstr, sqlcon); DataSet myds=newDataSet(); sqlcon.Open(); myda.Fill(myds, "table"); DataView view=myds.Tables[0].DefaultView; string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState ["OrderDire"]; view.Sort=sort; GridView1.DataSource=view; GridView1.DataBind(); sqlcon.Close(); } protectedvoid GridView1_Sorting(object sender, GridViewSortEventArgs e) { string sPage=e.SortExpression; if (ViewState["SortOrder"].ToString() == sPage) { if (ViewState["OrderDire"].ToString() == "Desc") ViewState["OrderDire"]="ASC"; else ViewState["OrderDire"]="Desc"; } else { ViewState["SortOrder"]=e.SortExpression; } bind(); }
排序效果如圖2-19所示。

圖2-19 排序效果
同時單擊其他列也可以排序,如圖2-20所示。

圖2-20 單擊“員工編號”排序
推薦閱讀
- AngularJS Testing Cookbook
- AIRAndroid應用開發實戰
- Raspberry Pi for Secret Agents(Third Edition)
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第2版)
- 21天學通C++(第6版)
- SAS數據統計分析與編程實踐
- jQuery開發基礎教程
- 利用Python進行數據分析(原書第3版)
- 動手學數據結構與算法
- Java Web應用開發給力起飛
- SpringBoot從零開始學(視頻教學版)
- Julia High Performance(Second Edition)
- Microsoft Dynamics GP 2013 Cookbook
- SAS編程演義
- Java程序設計