数据源是动态创建的DataTable,列头也是动态重建的
求能用的排序代码

解决方案 »

  1.   

    static DataColumn column = new DataColumn();   
      static DataTable table = new DataTable();   
      
        static DataRow MyRow;   
    ublic static DataTable GetCategoryTree(WebInfoBase info)   
      {   
         DataTable dt = info.List(_DefaultDB, "", "[ID],[Title],[ParentID],[ChildNum],[Depth],[OrderNo]", "&version=", "[ID] ASC");   
           
         if (table.Rows.Count > 0)   
         {   
             table.Columns.Clear();   
             table.Rows.Clear();   
         }   
         CreateDataTable();   
         GetTree(dt, "0", 0);   
         return table;   
      }   
        public static void GetTree(DataTable dt, string pid, int blank)   
        {   
            string str = " ";   
            DataView dv = new DataView(dt);   
            dv.RowFilter = "ParentID = " + pid;   
            if (blank > 0)   
            {   
                string s = "";   
                if (blank == 1)   
                {   
                    str = "├";   
                }   
                for (int i = 2; i <= blank; i++)   
                {   
                    s = s + "  |  "+" "+" - ";   
                }   
                str = s + "├";   
            }   
               
            foreach (DataRowView drv in dv)   
            {   
                string id = drv["ID"].ToString();   
                string Title = drv["Title"].ToString();   
                string OrderNo = drv["OrderNo"].ToString();   
                string ParentID = drv["ParentID"].ToString();   
                string Depth = drv["Depth"].ToString();   
                string ChildNum = drv["ChildNum"].ToString();   
                   
                MyRow = table.NewRow();   
                MyRow["ID"] = int.Parse(id);   
                MyRow["Title"] = str + Title;   
                MyRow["OrderNo"] = int.Parse(OrderNo);   
                MyRow["ParentID"] = int.Parse(ParentID);   
                MyRow["Depth"] = int.Parse(Depth);   
                MyRow["ChildNum"] = int.Parse(ChildNum);   
                table.Rows.Add(MyRow);   
      
                int n = int.Parse(Depth);   
                //if (n <= 1)   
                //{   
                    n++;   
                //}   
                GetTree(dt, id, n);   
            }   
        }   
           public static void CreateDataTable()   
        {   
            table.Columns.Clear();   
            column = new DataColumn();   
            column.DataType = System.Type.GetType("System.Int32");   
            column.ColumnName = "ID";   
            table.Columns.Add(column);   
      
            column = new DataColumn();   
            column.DataType = System.Type.GetType("System.Int32");   
            column.ColumnName = "ParentID";   
            table.Columns.Add(column);   
      
            column = new DataColumn();   
            column.DataType = Type.GetType("System.String");   
            column.ColumnName = "Title";   
            table.Columns.Add(column);   
      
            column = new DataColumn();   
            column.DataType = Type.GetType("System.Int32");   
            column.ColumnName = "ChildNum";   
            table.Columns.Add(column);   
      
            column = new DataColumn();   
            column.DataType = Type.GetType("System.Int32");   
            column.ColumnName = "Depth";   
            table.Columns.Add(column);   
      
            column = new DataColumn();   
            column.DataType = Type.GetType("System.Int32");   
            column.ColumnName = "OrderNo";   
            table.Columns.Add(column);   
            //table.Columns.Clear();   
      
        }   
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/01/21/3846843.aspx
      

  2.   

    我看我这个行http://blog.csdn.net/ws_hgo/archive/2009/01/21/3846843.aspx
      

  3.   

    ......
    你要求多得话,换其他控件不就好了吗??
    如:Infragistics系列的!!我用着还不错,功能全,也美观,就是速度有点慢!!
    呵呵~~不过也没关系
      

  4.   

    protected void grv_Sorting(object sender, GridViewSortEventArgs e)
        {
            string sortExpression = e.SortExpression;
            if (GridViewSortDirection == SortDirection.Ascending)                      
            {
                GridViewSortDirection = SortDirection.Descending;
                SortGridView(sortExpression, " DESC");
            }
            else
            {
                GridViewSortDirection = SortDirection.Ascending;
                SortGridView(sortExpression, " ASC");
            }
        }
    this.GridView1.Attributes.Add("SortExpression", "id");
    this.GridView1.Attributes.Add("SortDirection", "ASC");
    this.BindGridView();
    }
    }
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
     string sortExpression = e.SortExpression.ToString();
     string sortDirection = "ASC";
     if (sortExpression == this.GridView1.Attributes["SortExpression"])
    {
    sortDirection = (this.GridView1.Attributes["SortDirection"].ToString() == sortDirection ? "DESC" : "ASC");
    }
    this.GridView1.Attributes["SortExpression"] = sortExpression;
    this.GridView1.Attributes["SortDirection"] = sortDirection;
    this.BindGridView();
    }
     private void BindGridView()
    {
     string sortExpression = this.GridView1.Attributes["SortExpression"];
    string sortDirection = this.GridView1.Attributes["SortDirection"]; DataTable dtBind = this.getDB(); if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection)))
    {
    dtBind.DefaultView.Sort = string.Format("{0} {1}", sortExpression, sortDirection);
    }
     this.GridView1.DataSource = dtBind;
    this.GridView1.DataBind();
    } private DataTable getDB()
    {
    DataTable dt = new DataTable();return dt;
    }

    参考
      

  5.   

    数据有3列
    第0列 文本 无需排序
    第1列 价格 例如 150.00 120.00 130.00 升降序排序
    第2列 文本 无需排序
    第3列 整数 例如 1500 300 100 5000 升降排序我今天刚开始研究.net,所以希望大家能够详细一点,谢谢各位老师了。