特色栏目

ASP源码

PHP源码

.NET源码

JSP源码

游戏频道
专题合集
关闭菜单
首页> ASP.NET教程> ASP.Net2.0 GridView 多列排序,显示排序图标,分页

ASP.Net2.0 GridView 多列排序,显示排序图标,分页

时间:2009-06-30 16:48:57 作者:互联网

    最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能进行多列排序,而在实际应用中仅仅按照一列来排序是不能满足业务需求的,第三是GridView 分页问题,GridView预定义的分页页码显示,比较简单,而实际应用中,分页可能不是只显示首页,上一页,下一页,末页,或者是数字的页码那么简单,应该更需要,跳转,当前的页码,总页数等,更详尽的信息。

第一:GridView 多列排序与排序图标显示

首先我们可以新建一个类库程序,主要需要引用Sy***m.Web.Dll文件
然后新建一个类,这个类继承与GridView控件,我们只需要对部分方法进行重新即可。
我的演示的例子,采用了单列排序,如果启用多列排序,把控件的AllowMultiColumnSorting设置为True就是
多列排序。


  1    public class WebGridView:GridView
  2    {
  3        属性#region 属性
  4        /**////


  5        /// 是否启用或者禁止多列排序
  6        ///

  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        /**////
 26        /// 升序时显示图标
 27        ///

 28        [
 29        Description("升序时显示图标"),
 30        Category("排序"),
 31        Editor("Sy***m.Web.UI.Design.UrlEditor", typeof(Sy***m.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.***tring() : "");
 41            }
 42            set
 43            {
 44                ViewState["SortImageAsc"] = value;
 45            }
 46        }
 47        /**////
 48        /// 降序时显示图标
 49        ///

 50        [
 51        Description("降序时显示图标"),
 52        Category("排序"),
 53        Editor("Sy***m.Web.UI.Design.UrlEditor", typeof(Sy***m.Drawing.Design.UITypeEditor)),
 54        DefaultValue(""),
 55        ]
 56        public string SortDescImageUrl
 57        {
 58            get
 59            {
 60                object o = ViewState["SortImageDesc"];
 61                return (o != null ? o.***tring() : "");
 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.***tExpression = GetSortExpression(e);
 75            }
 76
 77            ba***OnSorting(e);
 78        }
 79        protected override void OnRowCreated(GridViewRowEventArgs e)
 80        {
 81            if (e.***.RowType == Da***ontrolRowType.Header)
 82            {
 83                if (SortExpression != St***g.Empty)
 84                {
 85                    DisplaySortOrderImages(SortExpression, e.Row);
 86                    th***CreateRow(0, 0, Da***ontrolRowType.EmptyDataRow, Da***ontrolRowState.Normal);
 87                }
 88            }
 89            ba***OnRowCreated(e);
 90        }
 91        #endregion
 92        受保护的方法#region 受保护的方法
 93        /**////
 94        ///  获取排序表达式
 95        ///

 96        protected string GetSortExpression(GridViewSortEventArgs e)
 97        {
 98            string[] sortColumns = null;
 99            string sortAttribute = SortExpression;
100
101            if (sortAttribute != St***g.Empty)
102            {
103                sortColumns = so***ttribute.Split(",".ToCharArray());
104            }
105            if (so***ttribute.IndexOf(e.***tExpression) > 0 || so***ttribute.StartsWith(e.***tExpression))
106            {
107                sortAttribute = ModifySortExpression(sortColumns, e.***tExpression);
108            }
109            else
110            {
111                sortAttribute += St***g.Concat(",", e.***tExpression, " ASC ");
112            }
113            return so***ttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115        }
116        /**////
117        ///  修改排序顺序
118        ///

119        protected string ModifySortExpression(string[] sortColumns, string sortExpression)
120        {
121            string ascSortExpression = St***g.Concat(sortExpression, " ASC ");
122            string descSortExpression = St***g.Concat(sortExpression, " DESC ");
123
124            for (int i = 0; i < so***olumns.Length; i++)
125            {
126
127                if (as***rtExpression.Equals(sortColumns[i]))
128                {
129                    sortColumns[i] = descSortExpression;
130                }
131
132                else if (de***ortExpression.Equals(sortColumns[i]))
133                {
134                    Ar***.Clear(sortColumns, i, 1);
135                }
136            }
137
138            return St***g.Join(",", sortColumns).Replace(",,", ",").TrimStart(",".ToCharArray());
139
140        }
141        /**////
142        ///  获取当前的表达式对所选列进行排序
143        ///

144        protected void SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
145        {
146            sortOrder = "";
147            sortOrderNo = -1;
148            for (int i = 0; i < so***olumns.Length; i++)
149            {
150                if (sortColumns[i].StartsWith(sortColumn))
151                {
152                    sortOrderNo = i + 1;
153                    if (AllowMultiColumnSorting)
154                    {
155                        sortOrder = sortColumns[i].Substring(so***olumn.Length).Trim();
156                    }
157                    else
158                    {
159                        sortOrder = ((SortDirection == So***irection.Ascending) ? "ASC" : "DESC");
160                    }
161                }
162            }
163        }
164        /**////
165        ///  绘制升序降序的图片
166        ///

167        protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168        {
169            string[] sortColumns = so***xpression.Split(",".ToCharArray());
170
171            for (int i = 0; i < dg***m.Cells.Count; i++)
172            {
173                if (dg***m.Cells[i].C***rols.Count > 0 && dg***m.Cells[i].Controls[0] is LinkButton)
174                {
175                    string sortOrder;
176                    int sortOrderNo;
177                    string column = ((LinkButton)dg***m.Cells[i].Controls[0]).CommandArgument;
178                    SearchSortExpression(sortColumns, column, out sortOrder, out sortOrderNo);
179                    if (sortOrderNo > 0)
180                    {
181                        string sortImgLoc = (so***rder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183                        if (sortImgLoc != St***g.Empty)
184                        {
185                            Image imgSortDirection = new Image();
186                            im***rtDirection.ImageUrl = sortImgLoc;
187                            dg***m.Cells[i].C***rols.Add(imgSortDirection);
188
189                        }
190                        else
191                        {
192
193                            if (AllowMultiColumnSorting)
194                            {
195                                Literal litSortSeq = new Literal();
196                                li***rtSeq.Text = sortOrderNo.***tring();
197                                dg***m.Cells[i].C***rols.Add(litSortSeq);
198
199                            }
200                        }
201                    }
202                }
203            }
204
205        }
206        #endregion
207    }
第二:详尽的分页信息显示,此功能没有封装成控件形式,直接在GridView_DataBound事件中对尾页操作即可。
下面是多列排序与分页显示代码的演示




   


       


            GridView PagerTemplate Example


                    AllowPaging="true" OnDataBound="CustomersGridView_DataBound" SortAscImageUrl="~imagesarrow-up.gif" SortDescImageUrl="~imagesarrow-down.gif" runat="server" AllowSorting="True" Width="723px">
           
           
               
                   
                       
                       
                   
               

                           
                                                            runat="server" />
                            首页
                            上一页
                            下一页
                            末页
                       

                           
                       

           

      

                    ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>" runat="server">
       

   



相关文章 最新文章

相关应用

热门文章

猜你喜欢

返回顶部