读书人

怎么生成树有关问题

发布时间: 2012-02-26 20:19:45 作者: rapoo

如何生成树问题?
树中显示各专业分类明细:
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.

读书人网 >C#

热点推荐