ASP.NET-Gridview中动态数据源的排序问题

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();
        }

你可能感兴趣的:(object,asp.net,sorting)