最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能进行多列排序,而在实际应用中仅仅按照一列来排序是不能满足业务需求的,第三是GridView 分页问题,GridView预定义的分页页码显示,比较简单,而实际应用中,分页可能不是只显示首页,上一页,下一页,末页,或者是数字的页码那么简单,应该更需要,跳转,当前的页码,总页数等,更详尽的信息。
第一:GridView 多列排序与排序图标显示
首先我们可以新建一个类库程序,主要需要引用System.Web.Dll文件
然后新建一个类,这个类继承与GridView控件,我们只需要对部分方法进行重新即可。
我的演示的例子,采用了单列排序,如果启用多列排序,把控件的AllowMultiColumnSorting设置为True就是
多列排序。
1 public class WebGridView:GridView
2 {
3 属性#region 属性
4 /**//// <summary>
5 /// 是否启用或者禁止多列排序
6 /// </summary>
7 [
8 Description("是否启用多列排序功能"),
9 Category("排序"),
10 DefaultValue("false"),
11 ]
12 public bool AllowMultiColumnSorting
13 {
14 get
15 {
16 object o = ViewState["EnableMultiColumnSorting"];
17 return (o != null ? (bool)o : false);
18 }
19 set
20 {
21 AllowSorting = true;
22 ViewState["EnableMultiColumnSorting"] = value;
23 }
24 }
25 /**//// <summary>
26 /// 升序时显示图标
27 /// </summary>
28 [
29 Description("升序时显示图标"),
30 Category("排序"),
31 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
32 DefaultValue(""),
33
34 ]
35 public string SortAscImageUrl
36 {
37 get
38 {
39 object o = ViewState["SortImageAsc"];
40 return (o != null ? o.ToString() : "");
41 }
42 set
43 {
44 ViewState["SortImageAsc"] = value;
45 }
46 }
47 /**//// <summary>
48 /// 降序时显示图标
49 /// </summary>
50 [
51 Description("降序时显示图标"),
52 Category("排序"),
53 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
54 DefaultValue(""),
55 ]
56 public string SortDescImageUrl
57 {
58 get
59 {
60 object o = ViewState["SortImageDesc"];
61 return (o != null ? o.ToString() : "");
62 }
63 set
64 {
65 ViewState["SortImageDesc"] = value;
66 }
67 }
68 #endregion
69 重写方法#region 重写方法
70 protected override void OnSorting(GridViewSortEventArgs e)
71 {
72 if (AllowMultiColumnSorting)
73 {
74 e.SortExpression = GetSortExpression(e);
75 }
76
77 base.OnSorting(e);
78 }
79 protected override void OnRowCreated(GridViewRowEventArgs e)
80 {
81 if (e.Row.RowType == DataControlRowType.Header)
82 {
83 if (SortExpression != String.Empty)
84 {
85 DisplaySortOrderImages(SortExpression, e.Row);
86 this.CreateRow(0, 0, DataControlRowType.EmptyDataR