gridview手动添加排序功能总结

注意:这里使用List<T>泛型集合的sort方法排序

 

上代码:

1. 初始化在 Page_Load中

                    //排序列参数
                    ViewState["columnName"] = "NewsId";
                    //排序方式参数,升序和降序
                    ViewState["columnSortType"] = "ASC";
                    //绑定数据源
                    BindData(1);
                    Session["bindTypeId"] = 1;

 

2. 绑定gridview的数据源

        //绑定数据源
        private void BindData(int bindType)
        {
            List<News> list = new List<News>();
            if (bindType == 1)
            {
                list = NewsBLL.GetAllNewsRetrunList();
            }
            else if (bindType == 2) //根据标题查询
            {
                list = NewsBLL.GetNewsListByTitle(this.txtTitle.Text.Trim());
            }
            else if (bindType == 3) //根据类别名称查询
            {
                list = NewsBLL.GetNewsListByNewsType(this.ddlTypeName.SelectedItem.Text);
            }
            else if (bindType == 5) //根据日期段查询
            {
                if (this.txtBeginDate.Text != "" && this.txtEndDate.Text != "")
                {
                   List<News> list_all = NewsBLL.GetAllNewsRetrunList();

                    foreach (News o in list_all)
                    {
                        int year = o.AddDate.Year;
                        string month = o.AddDate.Month.ToString();
                        if (Convert.ToInt32(month) < 10)
                        {
                            month = "0" + month;
                        }
                        string day = o.AddDate.Day.ToString();
                        if (Convert.ToInt32(day) < 10)
                        {
                            day = "0" + day;
                        }

                        string byear = (this.txtBeginDate.Text).Substring(0, 4);
                        string bmonth = (this.txtBeginDate.Text).Substring(5, 2);
                        string bday = (this.txtBeginDate.Text).Substring(8, 2);

                        string eyear = (this.txtEndDate.Text).Substring(0, 4);
                        string emonth = (this.txtEndDate.Text).Substring(5, 2);
                        string eday = (this.txtEndDate.Text).Substring(8, 2);


                        int date = Convert.ToInt32(year.ToString() + month + day);
                        int bdate = Convert.ToInt32(byear + bmonth.ToString() + bday);
                        int edate = Convert.ToInt32(eyear + emonth.ToString() + eday);

                        if (bdate <= date && date <= edate)
                        {
                            list.Add(o);
                        }

                    }
                }
            }
            list.Sort(new NewsSortByColumn(ViewState["columnName"].ToString(), ViewState["columnSortType"].ToString()));
            this.gvNews.DataSource = list;
            this.gvNews.DataBind();

        }

 

3. 封装好的实现接口的排序方法

    /// <summary>
    /// 根据列进行排序
    /// </summary>
    public class NewsSortByColumn : IComparer<News>
    {
        private string columnName;
        private string columnSortType;
        public NewsSortByColumn(string columnName, string columnSortType)
        {
            this.columnName = columnName;
            this.columnSortType = columnSortType;
        }
        public int Compare(News x, News y)
        {
            switch (this.columnName)
            {
                case "NewsId":
                    if (columnSortType == "ASC")
                    {
                        return x.NewsId.CompareTo(y.NewsId);
                    }
                    else
                    {
                        return -x.NewsId.CompareTo(y.NewsId);
                    }
                case "Title":
                    if (columnSortType == "ASC")
                    {
                        return x.Title.CompareTo(y.Title);
                    }
                    else
                    {
                        return -x.Title.CompareTo(y.Title);
                    }
                case "FromWhere":
                    if (columnSortType == "ASC")
                    {
                        return x.FromWhere.CompareTo(y.FromWhere);
                    }
                    else
                    {
                        return -x.FromWhere.CompareTo(y.FromWhere);
                    }
                case "FromUrl":
                    if (columnSortType == "ASC")
                    {
                        return x.FromUrl.CompareTo(y.FromUrl);
                    }
                    else
                    {
                        return -x.FromUrl.CompareTo(y.FromUrl);
                    }
                case "Author":
                    if (columnSortType == "ASC")
                    {
                        return x.Author.CompareTo(y.Author);
                    }
                    else
                    {
                        return -x.Author.CompareTo(y.Author);
                    }
                case "NewsTypeId":
                    if (columnSortType == "ASC")
                    {
                        return x.NewsTypeId.CompareTo(y.NewsTypeId);
                    }
                    else
                    {
                        return -x.NewsTypeId.CompareTo(y.NewsTypeId);
                    }
                case "NewsType":
                    if (columnSortType == "ASC")
                    {
                        return x.NewsType.CompareTo(y.NewsType);
                    }
                    else
                    {
                        return -x.NewsType.CompareTo(y.NewsType);
                    }
                case "KeyWords":
                    if (columnSortType == "ASC")
                    {
                        return x.KeyWords.CompareTo(y.KeyWords);
                    }
                    else
                    {
                        return -x.KeyWords.CompareTo(y.KeyWords);
                    }
                case "AddDate":
                    if (columnSortType == "ASC")
                    {
                        return x.AddDate.CompareTo(y.AddDate);
                    }
                    else
                    {
                        return -x.AddDate.CompareTo(y.AddDate);
                    }
                case "Content":
                    if (columnSortType == "ASC")
                    {
                        return x.Content.CompareTo(y.Content);
                    }
                    else
                    {
                        return -x.Content.CompareTo(y.Content);
                    }
                case "ClickCount":
                    if (columnSortType == "ASC")
                    {
                        return x.ClickCount.CompareTo(y.ClickCount);
                    }
                    else
                    {
                        return -x.ClickCount.CompareTo(y.ClickCount);
                    }
                default:
                    return x.NewsId.CompareTo(y.NewsId);
            }
        }

    }

 

 

4. gridview中 激发排序的事件 gvNews_Sorting

        //排序的方法事件
        protected void gvNews_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sPage = e.SortExpression;
            if (ViewState["columnName"].ToString() == sPage)
            {
                if (ViewState["columnSortType"].ToString() == "DESC")
                    ViewState["columnSortType"] = "ASC";
                else
                    ViewState["columnSortType"] = "DESC";
            }
            else
            {
                ViewState["columnName"] = e.SortExpression;
            }
            BindData(Convert.ToInt32(Session["bindTypeId"]));
        }

 

5 这里使用的是新闻类 News, 其他类同样的实现方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值