我的数据是从outlook直接放到dataset然后绑定到gridview的,所以没办法用sql排序,
把数据绑到gridview后分页显示了,然后我想按某列排序,在网上也搜了不少方法,就是弄不出来,崩溃了。设了Allowsoting 为True也不管用
protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            ViewState["sortExpression"] = "id"; 
            ViewState["sort"] = " DESC"; 
            GridBind(); 
        } 
    } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) 
    { 
        ViewState["sortExpression"] = e.SortExpression; 
        if (ViewState["sort"].ToString() == " DESC")                    
        { 
            ViewState["sort"] = " ASC"; 
            GridBind(); 
        } 
        else 
        { 
            ViewState["sort"] = " DESC"; 
            GridBind(); 
        } 
        
    } 
    private void GridBind() 
    { 
        DataSet myset = DataProxy.GetDataSet(); 
        DataView myview = myset.Tables[0].DefaultView; 
        myview.Sort = ViewState["sortExpression"].ToString() + ViewState["sort"].ToString(); 
        GridView1.DataSource = myview; 
        GridView1.DataBind();    
    }这段代码好像有用,但是我不知道哪个地方可以写我要排序的列名。我是太笨了,谢谢大家能来指教,感激不尽!

解决方案 »

  1.   

    ViewState["sortExpression"] = "id"; 
    id就是列名,你把“id”改成你需要排序的字段
      

  2.   

    private void GridBind() 
        { 
            DataSet myset = DataProxy.GetDataSet(); 
            DataView myview = myset.Tables[0].DefaultView; 
            myview.Sort = ViewState["sortExpression"].ToString() + ViewState["sort"].ToString(); 
            GridView1.DataSource = myview; 
            GridView1.DataBind();    
        }
    改为:
    private void GridBind() 
        { 
            DataSet myset = DataProxy.GetDataSet();
            IEnumerable<DataRow> drs = DataTableExtensions.AsEnumerable(myset.Tables[0]);
            //var d = drs.OrderBy(p => p.Field<字段类型>("排序的字段名")).ToList(); //顺序
            //var d = drs.OrderByDescending(p => p[0]).ToList()); //倒序
            var d = drs.OrderByDescending(p => p.Field<字段类型>("排序的字段名")).ToList(); //倒序
            GridView1.DataSource = d; 
            GridView1.DataBind();    
        }
      

  3.   


     #region Page_Load
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.GridView1.Attributes.Add("SortExpression", "TestID");
                this.GridView1.Attributes.Add("SortDirection", "ASC");            
                //绑定GridView
                fn_DataBind();
            }
        }
        #endregion    #region 得到绑定GridView的DataTable
        private DataTable fn_getDataTable()
        {
            string strSql = " SELECT TestID, TestUser, TestTime FROM Test ";
            DBClass db = new DBClass();
            DataSet ds = db.RunSelectGetDataSet(strSql);
            return ds.Tables[0];
        }
        #endregion    #region 分页
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {       
            this.GridView1.PageIndex = e.NewPageIndex;
            fn_DataBind();
        }
        #endregion    #region 排序
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            if (e.SortExpression != "")
            {
                if (GridView1.PageCount > 0)
                {
                    //设定排序方向
                    string SortDirection = "ASC";
                    SortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == SortDirection ? "DESC" : "ASC");
                    this.GridView1.Attributes["SortExpression"] = e.SortExpression;
                    this.GridView1.Attributes["SortDirection"] = SortDirection;
                    //重新绑定数据
                    fn_DataBind();
                }
            }
        }
        #endregion    #region 绑定GridView
        private void fn_DataBind()
        {
            DataTable dt = fn_getDataTable();
            string SortDirection = this.GridView1.Attributes["SortDirection"].ToString();
            string SortExpression = this.GridView1.Attributes["SortExpression"].ToString();
            dt.DefaultView.Sort = string.Format("{0} {1}", SortExpression, SortDirection);
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
        #endregion
    借用此法实现了排序和分页两种功能
    谢谢大家回复