注意:这里使用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, 其他类同样的实现方法