代码改变世界

用DataTable 递归生成目录树

2011-03-03 12:25  stulife  阅读(3811)  评论(0编辑  收藏  举报

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