ASP.NET-Gridview中动态数据源的排序问题
在asp.net的应用项目中,大部分的页面都是使用控件实现,gridview是最常用的数据组建之一,他可以使用静态的数据源例如 objecdatasource,可以很方便的实现分页,排序等功能,但有时因为项目的需要 ,程序中会使用动态的数据源如,datatable或dataview,这样分页排序等功能就要手工实现了,这里介绍下如何手工简单实现排序!
首先要实现GridView的Sorting事件 否则GridView会报错:GridView 激发了未处理的事件“Sorting”。
以下是简单的实现代码
protected void gvDeliveryNoteList_Sorting(object sender, GridViewSortEventArgs e)
{
this.gvDeliveryNoteList.EditIndex = -1;
if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())//判断viewstate中的排序字段,在这之前要在page_load里初始化 ViewState["sortColumn"]与ViewState["sortDirection"]
{
if ("ASC" == ViewState["sortDirection"].ToString())
{
ViewState["sortDirection"] = "DESC";
}
else
{
ViewState["sortDirection"] = "ASC";
}
}
else
{
ViewState["sortColumn"] = e.SortExpression.ToString();
ViewState["sortDirection"] = "ASC";
}
//这里是关键,如果你使用dataview作为数据源,那可以直接多结果集进行排序,否则你要转换以下
//this.gvDeliveryNoteList.DataSource = (DataTable)ViewState["dt"];
DataTable dt = (DataTable)ViewState["dt"];
DataView dw = dt.DefaultView;
//增加排序字段
dw.Sort = Convert.ToString(ViewState["sortColumn"]) + " " + Convert.ToString(ViewState["sortDirection"]);
this.gvDeliveryNoteList.DataSource=dw;
this.gvDeliveryNoteList.DataBind();
}