我gridview的表头是动态添加,为什么在后台写了代码 ,排序还是没反应,allowsort也设置true,还要有什么注意的地方吗?

解决方案 »

  1.   

    列绑定排序字段SortExpression="字段名"  ?
      

  2.   

    GRIDVIEW边上有个三角形,在哪里绑定下字段
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["SortOrder"] = "shopeScoure";//设置排序字段
                ViewState["OrderDire"] = "Desc";//设置排序方式
                GridViewBind();
            }
        }
        public void GridViewBind()
        {
            //实例化SqlConnection对象
            SqlConnection con = new SqlConnection("server=(local);uid=sa;pwd=sa;database=db_11");
            con.Open();
            //实例化SqlDataAdapter对象
            SqlDataAdapter da = new SqlDataAdapter("select * from tb_02", con);
            //实例化数据集DataSet
            DataSet ds = new DataSet();
            da.Fill(ds, "tb_02");
            //设置AllowSorting属性
            GridView1.AllowSorting = true;
            DataView dv = ds.Tables[0].DefaultView;
            dv.Sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
            //绑定DataList控件
            GridView1.DataSource = dv;//设置数据源,用于填充控件中的项的值列表
            GridView1.DataBind();//将控件及其所有子控件绑定到指定的数据源
        }
        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sPage = e.SortExpression;
            if (ViewState["SortOrder"].ToString() == sPage)
            {
                if (ViewState["OrderDire"].ToString() == "Desc")
                    ViewState["OrderDire"] = "ASC";
                else
                    ViewState["OrderDire"] = "Desc";
            }
            else
            {
                ViewState["SortOrder"] = e.SortExpression;
            }
            GridViewBind();
        }
      

  4.   

    借楼主的帖子,我也请教各位一个排序的问题:
    我的用的排序是
    DataView dv=dt.DefaultView;
    dv.Sort="myField asc";//or "myField desc"
    gridView.DataSource=dv;
    gridView.DataBind();但是每个列不管列内容是数值还是字符串,都是按字符串的排序规则,如按“a b c” 、“9000  9.1  888  889 .... 1000.03”不知是什么原因?谢谢!
    (楼主勿见怪!)
      

  5.   

    这个【、“9000  9.1  888  889 .... 1000.03” 】写错了
    实际排出来的效果如下:desc
    9.87  
    9
    79
    6
    .
    .
    .
    103
    10.54
    .
    .
    .
      

  6.   

    不好意思,上述我所说的排序,可以在构造datatable的时候,对列指定类型,可以解决。
      

  7.   

    我的代码就是跟四楼说的一样,但是没反应。
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                
                this.btnExport.Visible = false;
                ViewState["SortOrder"] = "学号";
                ViewState["OrderDire"] = "ASC";
                ddlYearBind();
                gdvYearBind();
            }
        }
           public void gdvYearBind()
        {
            SqlConnection con = db.GetConnection();
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter("proState",con);
            sda.SelectCommand.CommandType = CommandType.StoredProcedure;
            SqlParameter prams = new SqlParameter("@Term",SqlDbType.VarChar,20);
            prams.Value = this.ddlYear.SelectedValue;
            sda.SelectCommand.Parameters.Add(prams);
            DataSet ds = new DataSet();
            sda.Fill(ds,"table"); 
            DataView dv=ds.Tables["table"].DefaultView;
            string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"];
            dv.Sort = sort; 
            gdvYear.DataSource=dv;
            gdvYear.DataBind();
            
        }
        protected void gdvYear_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sPage = e.SortExpression;
            if (ViewState["SortOrder"].ToString() == sPage)
            {
                if (ViewState["OrderDire"].ToString() == "Desc")
                    ViewState["OrderDire"] = "ASC";
                else
                    ViewState["OrderDire"] = "Desc";
            }
            else
            {
                ViewState["SortOrder"] = e.SortExpression;
            }        gdvYearBind();    }
              //创建表头
        protected void gdvYear_RowCreated(object sender, GridViewRowEventArgs e)
        {
            switch (e.Row.RowType)    //行的类型
            {
                case DataControlRowType.Header:   //判断是否是表头
                    TableCellCollection tcHeader = e.Row.Cells;
                    tcHeader.Clear();
                    tcHeader.Add(new TableHeaderCell());  //添加第一行第一列
                    tcHeader[0].Attributes.Add("rowspan", "2");  //夸行
                    tcHeader[0].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[0].Attributes.Add("fontcolor", "balck");
                    tcHeader[0].Attributes.Add("SortExpression","Sno");
                    tcHeader[0].Text = "<a href='#'>学号</a>";                tcHeader.Add(new TableHeaderCell());  //添加第一行第二列
                    tcHeader[1].Attributes.Add("rowspan", "2");
                    tcHeader[1].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[1].Attributes.Add("fontcolor", "balck");
                    tcHeader[1].Text = "姓名";                tcHeader.Add(new TableHeaderCell());  //添加第一行第三列
                    tcHeader[2].Attributes.Add("colspan", "4"); //跨列
                    tcHeader[2].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[2].Attributes.Add("fontcolor", "balck");
                    tcHeader[2].Text = "考勤状态";                tcHeader.Add(new TableHeaderCell());  //添加第一行第四列
                    tcHeader[3].Attributes.Add("rowspan", "2");
                    tcHeader[3].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[3].Attributes.Add("fontcolor", "balck");
                    tcHeader[3].Text = "总次数</th></tr><tr>";                //添加第二行
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[4].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[4].Text = "早退";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[5].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[5].Text = "迟到";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[6].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[6].Text = "旷课";
                    tcHeader.Add(new TableHeaderCell());
                    tcHeader[7].Attributes.Add("bgcolor", "bfcded");
                    tcHeader[7].Text = "请假";
                    break;        }