- ASP.NET开发技巧精讲
- 黄鸣
- 418字
- 2025-02-22 23:06:35
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 单击“员工编号”排序