zoukankan      html  css  js  c++  java
  • GridView多列排序

      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.EmptyDataRow, DataControlRowState.Normal);
     87             }
     88         }
     89         base.OnRowCreated(e);
     90     }
     91     #endregion
     92     受保护的方法#region 受保护的方法
     93     /**//// <summary>
     94     ///  获取排序表达式
     95     /// </summary>
     96     protected string GetSortExpression(GridViewSortEventArgs e)
     97     {
     98         string[] sortColumns = null;
     99         string sortAttribute = SortExpression;
    100 
    101         if (sortAttribute != String.Empty)
    102         {
    103             sortColumns = sortAttribute.Split(",".ToCharArray());
    104         }
    105         if (sortAttribute.IndexOf(e.SortExpression) > 0 || sortAttribute.StartsWith(e.SortExpression))
    106         {
    107             sortAttribute = ModifySortExpression(sortColumns, e.SortExpression);
    108         }
    109         else
    110         {
    111             sortAttribute += String.Concat(",", e.SortExpression, " ASC ");
    112         }
    113         return sortAttribute.TrimStart(",".ToCharArray()).TrimEnd(",".ToCharArray());
    114 
    115     }
    116     /**//// <summary>
    117     ///  修改排序顺序
    118     /// </summary>
    119     protected string ModifySortExpression(string[] sortColumns, string sortExpression)
    120     {
    121         string ascSortExpression = String.Concat(sortExpression, " ASC ");
    122         string descSortExpression = String.Concat(sortExpression, " DESC ");
    123 
    124         for (int i = 0; i < sortColumns.Length; i++)
    125         {
    126 
    127             if (ascSortExpression.Equals(sortColumns[i]))
    128             {
    129                 sortColumns[i] = descSortExpression;
    130             }
    131 
    132             else if (descSortExpression.Equals(sortColumns[i]))
    133             {
    134                 Array.Clear(sortColumns, i, 1);
    135             }
    136         }
    137 
    138         return String.Join(",", sortColumns).Replace(",,", ",").TrimStart(",".ToCharArray());
    139 
    140     }
    141     /**//// <summary>
    142     ///  获取当前的表达式对所选列进行排序
    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 < sortColumns.Length; i++)
    149         {
    150             if (sortColumns[i].StartsWith(sortColumn))
    151             {
    152                 sortOrderNo = i + 1;
    153                 if (AllowMultiColumnSorting)
    154                 {
    155                     sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
    156                 }
    157                 else
    158                 {
    159                     sortOrder = ((SortDirection == SortDirection.Ascending) ? "ASC" : "DESC");
    160                 }
    161             }
    162         }
    163     }
    164     /**//// <summary>
    165     ///  绘制升序降序的图片
    166     /// </summary>
    167     protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
    168     {
    169         string[] sortColumns = sortExpression.Split(",".ToCharArray());
    170 
    171         for (int i = 0; i < dgItem.Cells.Count; i++)
    172         {
    173             if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] is LinkButton)
    174             {
    175                 string sortOrder;
    176                 int sortOrderNo;
    177                 string column = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
    178                 SearchSortExpression(sortColumns, column, out sortOrder, out sortOrderNo);
    179                 if (sortOrderNo > 0)
    180                 {
    181                     string sortImgLoc = (sortOrder.Equals("ASC") ? SortAscImageUrl : SortDescImageUrl);
    182 
    183                     if (sortImgLoc != String.Empty)
    184                     {
    185                         Image imgSortDirection = new Image();
    186                         imgSortDirection.ImageUrl = sortImgLoc;
    187                         dgItem.Cells[i].Controls.Add(imgSortDirection);
    188 
    189                     }
    190                     else
    191                     {
    192 
    193                         if (AllowMultiColumnSorting)
    194                         {
    195                             Literal litSortSeq = new Literal();
    196                             litSortSeq.Text = sortOrderNo.ToString();
    197                             dgItem.Cells[i].Controls.Add(litSortSeq);
    198 
    199                         }
    200                     }
    201                 }
    202             }
    203         }
    204 
    205     }
    206     #endregion
    207 }
    View Code
  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/ps122/p/5619617.html
Copyright © 2011-2022 走看看