首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么生成树有关问题

2012-02-26 
如何生成树问题?树中显示各专业分类明细:1.会计1.会计印章2.帐户管理1.未实行章证分管2.3.1.2.3.外汇会计

如何生成树问题?
树中显示各专业分类明细:
      1.会计
              1.会计印章
              2.帐户管理
                      1.未实行章证分管
                      2.
                      3.
                              1.
                              2.
              3.外汇会计业务
      2.保卫
              1.安全管理
                      1.
                              1.
                              2.
              2.器械防护
      3.人事
              1.员工管理
              2.考勤管理
                      1.
             
数据库 "专业 "表:
ID                       明细
1                         会计
1.1                     会计印章
1.2                     帐户管理
1.2.1                 未实行章证分管
1.2.2                 ...
1.2.3                 ...
1.2.3.1             ...
1.2.3.2             ...
2                         保卫
2.1                     安全管理
2.1.1                 ...
2.1.2                 ...
.
.
.
这样的树怎样实现?最好有代码参考,我是初手,第一次接触树结构.

[解决办法]
这个数据库设计的不好 应该类似如下

--------------------------
ID Category ParentID
1 会计 0
11 会计印章 1
12 帐户管理 1
121 未实行章证分管 12
--------------------------
这样在读取数据时每次根据ParentID就知道当前节点应该属于哪个叶节点下了 否则如果用你的这个数据库 恐怕解析起来比较麻烦
[解决办法]
这是我以前做的一个行业的 你可以看看
private void loadtreeview()
{
string sqlselect= "select industry_name,industry_id from B2B_industry where industry_id_top=0 ";//,industry_sequence,GB_ID
DataTable pardt=myDatabase.SelectData(sqlselect);
for(int i=0;i <pardt.Rows.Count;i++)
{
DataRow dr=pardt.Rows[i];
string hy_name=dr[0].ToString();
string industry_id=dr[1].ToString();
//string hy_sequence=dr[2].ToString();
//string hy_GB_ID=dr[3].ToString();
TreeNode parnode=new TreeNode(hy_name);


parnode.Tag=industry_id;

this.treeView1.Nodes.Add(parnode);
AddChindNode(parnode,industry_id);
}
private void AddChindNode(TreeNode parnode,string sub_id_top)
{

string sqlselect= "select industry_name,industry_id from B2B_industry where industry_id_top= "+sub_id_top+ " ";//,industry_sequence,GB_ID
DataTable pardt=myDatabase.SelectData(sqlselect);
for(int i=0;i <pardt.Rows.Count;i++)
{
DataRow dr=pardt.Rows[i];
string hy_name=dr[0].ToString();
string industry_id=dr[1].ToString();
//string hy_sequence=dr[2].ToString();
//string hy_GB_ID=dr[3].ToString();
TreeNode subnode=new TreeNode(hy_name);
subnode.Tag=industry_id;
parnode.Nodes.Add(subnode);
AddChindNode(subnode,industry_id);
}
}
[解决办法]
使用递归 ,找他的子节点,然后兄弟节点
数据库设计就这样
ID Category ParentID
1 会计 0
11 会计印章 1
12 帐户管理 1
121 未实行章证分管 12
再设置一下连接 目录还是功能 等等等什么的
[解决办法]
代码太多就不写出来了

参看 http://www.cnblogs.com/jhtchina/articles/367597.html
[解决办法]
如果数据量不大写到xml文件中是最好的办法,生成树最容易,
[解决办法]
可以在生成树节点时 将分值存入node.tag中

然后在TreeView的afterselect事件中

通过SelectedNode.Tag来读取该节点的分值
[解决办法]
至于文本对象则通过SelectedNode.Text来获取
[解决办法]
点击某节点 在AftterSelect事件里
[解决办法]
建议从node继承一个类,把数据放到类中,再把类对象显示到treeview中,
[解决办法]
ls的 没这个必要吧?
[解决办法]
这是一个递归算法问题。找到所有root,然后分别拿root去往下找直接children.

热点排行