SoFunction
Updated on 2025-03-04

ASP.Net2.0 GridView Multi-column sorting, display sorting icons, paging

  1    public class WebGridView:GridView
  2    {
3                                                              �
  4        /**//// <summary>
5         // Whether to enable or disable multiple column sorting
  6        /// </summary>
  7        [
8       Description("Whether to enable multi-column sorting function"),
9         Category("Sort"),
 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       /// Display icons in ascending order
 27        /// </summary>
 28        [
29      Description("Show icons in ascending order"),
30        Category("Sort"),
 31        Editor("", typeof()),
 32        DefaultValue(""),
 33
 34        ]
 35        public string SortAscImageUrl
 36        {
 37            get
 38            {
 39                object o = ViewState["SortImageAsc"];
 40                return (o != null ? () : "");
 41            }
 42            set
 43            {
 44                ViewState["SortImageAsc"] = value;
 45            }
 46        }
 47        /**//// <summary>
48        /// Display icons in descending order
 49        /// </summary>
 50        [
51      Description("Show icons in descending order"),
52        Category("Sort"),
 53        Editor("", typeof()),
 54        DefaultValue(""),
 55        ]
 56        public string SortDescImageUrl
 57        {
 58            get
 59            {
 60                object o = ViewState["SortImageDesc"];
 61                return (o != null ? () : "");
 62            }
 63            set
 64            {
 65                ViewState["SortImageDesc"] = value;
 66            }
 67        }
 68        #endregion
69           Rewrite method #region Rewrite method
 70        protected override void OnSorting(GridViewSortEventArgs e)
 71        {
 72            if (AllowMultiColumnSorting)
 73            {
 74                = GetSortExpression(e);
 75            }
 76
 77            (e);
 78        }
 79        protected override void OnRowCreated(GridViewRowEventArgs e)
 80        {
 81            if ( == )
 82            {
 83                if (SortExpression != )
 84                {
 85                    DisplaySortOrderImages(SortExpression, );
 86                    (0, 0, , );
 87                }
 88            }
 89            (e);
 90        }
 91        #endregion
92        Protected Method #region Protected Method
 93        /**//// <summary>
94        ///  Get the sort expression
 95        /// </summary>
 96        protected string GetSortExpression(GridViewSortEventArgs e)
 97        {
 98            string[] sortColumns = null;
 99            string sortAttribute = SortExpression;
100
101            if (sortAttribute != )
102            {
103                sortColumns = (",".ToCharArray());
104            }
105            if (() > 0 || ())
106            {
107                sortAttribute = ModifySortExpression(sortColumns, );
108            }
109            else
110            {
111                sortAttribute += (",", , " ASC ");
112            }
113            return (",".ToCharArray()).TrimEnd(",".ToCharArray());
114
115        }
116        /**//// <summary>
117        ///  Modify the sort order
118        /// </summary>
119        protected string ModifySortExpression(string[] sortColumns, string sortExpression)
120        {
121            string ascSortExpression = (sortExpression, " ASC ");
122            string descSortExpression = (sortExpression, " DESC ");
123
124            for (int i = 0; i < ; i++)
125            {
126
127                if ((sortColumns[i]))
128                {
129                    sortColumns[i] = descSortExpression;
130                }
131
132                else if ((sortColumns[i]))
133                {
134                    (sortColumns, i, 1);
135                }
136            }
137
138            return (",", sortColumns).Replace(",,", ",").TrimStart(",".ToCharArray());
139
140        }
141        /**//// <summary>
142        ///  Get the current expression to sort the selected column
143        /// </summary>
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 < ; i++)
149            {
150                if (sortColumns[i].StartsWith(sortColumn))
151                {
152                    sortOrderNo = i + 1;
153                    if (AllowMultiColumnSorting)
154                    {
155                        sortOrder = sortColumns[i].Substring().Trim();
156                    }
157                    else
158                    {
159                        sortOrder = ((SortDirection == ) ? "ASC" : "DESC");
160                    }
161                }
162            }
163        }
164        /**//// <summary>
165        ///  Draw pictures in ascending and descending order
166        /// </summary>
167        protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168        {
169            string[] sortColumns = (",".ToCharArray());
170
171            for (int i = 0; i < ; i++)
172            {
173                if ([i]. > 0 && [i].Controls[0] is LinkButton)
174                {
175                    string sortOrder;
176                    int sortOrderNo;
177                    string column = ((LinkButton)[i].Controls[0]).CommandArgument;
178                    SearchSortExpression(sortColumns, column, out sortOrder, out sortOrderNo);
179                    if (sortOrderNo > 0)
180                    {
181                        string sortImgLoc = (("ASC") ? SortAscImageUrl : SortDescImageUrl);
182
183                        if (sortImgLoc != )
184                        {
185                            Image imgSortDirection = new Image();
186                            = sortImgLoc;
187                            [i].(imgSortDirection);
188
189                        }
190                        else
191                        {
192
193                            if (AllowMultiColumnSorting)
194                            {
195                                Literal litSortSeq = new Literal();
196                                = ();
197                                [i].(litSortSeq);
198
199                            }
200                        }
201                    }
202                }
203            }
204
205        }
206        #endregion
207    }