用DataTable 递归生成目录树

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

转载于:https://www.cnblogs.com/stulife/archive/2011/03/03/1969760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值