# 大侠们，这棵树怎么生成？

0

0

Dictionary<level1,Dictionary<level2,Dictionary<level3,List<level4>>>>

foreach(DataRow dr in DataTable.Rows)

{

string level1 = dr[0].ToString();

string level2=dr[1].ToString();

string level3 = dr[2].ToString();

string level4 = dr[3].ToString();

if(dicLevel1.ContainsKey(level1))

{

//把字典提出来，然后加入

}

else

{

//新建个字典

}

}

0

个人感觉 使用递归算法

Mundo Novo | 园豆：69 (初学一级) | 2012-07-11 22:51

@Good_Luck:

做过树形菜单么？   你需要定义好条件。

``` 1     protected void BingBookNaiget(int pid, TreeNode pNode)
2         {
3             //请用递归方法理解
4
5             List<Category> list = CategoryManagers.GetCategoriesByPId(pid);
6             if (list != null)
7             {
8                 foreach (Category item in list)
9                 {
10                     TreeNode node = new TreeNode();
11                     node.Value = item.PId.ToString();
12                     node.NavigateUrl = ResolveUrl("~/Book/list.aspx") + "?pid=" + pid;
13                     node.Text = item.Name;
14                     if (pid == 0)
15                     {
16                         //添加父节点
19
20                     }
21                     else
22                     {
23                         //添加子节点
25
26                     }
27                     BingBookNaiget(item.Id, node);
28                 }
29             }
30
31         }```

0
```--drop table #Tmp
create table #Tmp
(
id int,
level1  varchar(5),
level2  varchar(5),
level3  varchar(5),
level4  varchar(5)
);
insert into #Tmp
select 1,'A','B','C','D'
insert into #Tmp
select 2,'A','F','C','D'
insert into #Tmp
select 3,'B','C','F','D'

select * from #Tmp

select newstr
from
(
select ''+level1 as newstr,id, 1 as orderid from #Tmp
union all
select '----'+level2, id,2 as orderid from #Tmp
union all
select '--------'+level3,id, 3 as orderid from #Tmp
union all
select '------------'+level4,id, 4 as orderid from #Tmp
)t
order by id,orderid

--truncate table #Tmp```

owsir | 园豆：481 (菜鸟二级) | 2012-07-12 09:32
0

code先生-null | 园豆：307 (菜鸟二级) | 2012-07-12 16:18
0

1、ID,PID字段，这种方式使用递归方式获取，可以支持非常多的节点

2、使用编码长度规则表+内容表，这种方式使用定长编码规则，好处是速度非常快，适合类别不多，但是明细很多的。

您需要登录以后才能回答，未注册用户请先注册