小弟向帅哥美女求助:如何实现以下这样的树(进去看看就知道啦)

dahai99007 2008-07-03 04:21:51
  我想实现以下一个功能:
  数据库中有个表,里边有2个字段分别为:FileName(varchar),Document(varchar).
一个FileName对应一个或多个Document,我想在树下显示FileName,然后在FileName下边显示
FileName对应的那一个或多哥Document.
  这要怎么实现?
  下边是把FileName显示在树下的实现代码,下一步如何把Document以对应的FileName的子节
点显示下面呢?
  

  private void frmTreeView_Load(object sender, EventArgs e)
{
string sqlConn = "data source=.;database=bfbc;uid=sa;pwd=sa";
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlConn);
conn.Open();
string selectSql = "select FileName,VehicleConfigureDocument from DemarcateRelatingDocument";
DataTable dt=new DataTable("DemarcateRelatingDocument");
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(selectSql, sqlConn);
int fillNum = 0;
fillNum=da.Fill(dt);
for (int i = 0; i < fillNum; i++)
{
this.treeView1.Nodes.Add(dt.Rows[i][0].ToString());
}
conn.Close();
}
  

  帅哥美女们帮帮小弟,小弟在次先谢谢了.
...全文
166 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2008-07-04
  • 打赏
  • 举报
回复
找找递归构造树吧,应该.
一品梅 2008-07-04
  • 打赏
  • 举报
回复
不是帅哥,低调路过.
dahai99007 2008-07-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dyshadow 的回复:]
首先:
抽取所有DOCUMENT
Select Distinct Document From table
sqlReader=....
循环读取:
While (sqlReader.Read())
{
TreeNode tnDocument=new TreeNode(sqlReader["Document"].tostring());
treeView1.Nodes.Add(tnDocument);
sql="Select File Form table " +
"Where Document=" + sqlReader["Document"].tostring();
sqlReaderFile=.....
While (sqlReaderFile.Read())
{

[/Quote]
楼上的哥们,这样不行啊.
上边sqlReader.Read()
读一次后又不能关闭,不关闭下边的sqlReaderFile.Read()又读不了.
这个该怎么解决呢?
dahai99007 2008-07-04
  • 打赏
  • 举报
回复
各位同仁,哪位能帮我分析下边的代码啊?

private void frmTreeView_Load(object sender, EventArgs e)
{
string sqlConn = "data source=.;database=bfbc;uid=sa;pwd=sa";
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlConn);
conn.Open();
string selectSql = "select FileName,VehicleConfigureDocument from DemarcateRelatingDocument";
DataTable dt=new DataTable();
System.Data.SqlClient.SqlDataAdapter da=new System.Data.SqlClient.SqlDataAdapter(selectSql,conn);
int rtnNum=0;
rtnNum=da.Fill(dt);
for (int i = 0; i < rtnNum; i++)
{
TreeNode fileNameNode = new TreeNode(dt.Rows[i][0].ToString());
if (!this.treeView1.Nodes.Contains(fileNameNode))
{
this.treeView1.Nodes.Add(fileNameNode);
}
TreeNode documentNode = new TreeNode(dt.Rows[i]["VehicleConfigureDocument"].ToString());
if (!fileNameNode.Nodes.Contains(documentNode))
{
fileNameNode.Nodes.Add(documentNode);
}
}
conn.Close();
}

以上代码实现的是一个树,表中有FileName和VehicleConfigureDocument 两个字段,以FileName为结点,把VehicleConfigureDocument 做为其子节点加上,FileName对应一个或多个VehicleConfigureDocument ,有多个VehicleConfigureDocument 的话都加在FileName下边.
但是以上代码会是这样的结果:
FileName1
 ...VehicleConfigureDocument1
FileName2
 ...VehicleConfigureDocument2
FileName3
 ...VehicleConfigureDocument3
FileName1
 ...VehicleConfigureDocument2
怎么能实现这样的:
FileName1
 ...VehicleConfigureDocument1
 ...VehicleConfigureDocument1
FileName2
 ...VehicleConfigureDocument2
FileName3
 ...VehicleConfigureDocument3
也就是我如何来判断在加如第二个...VehicleConfigureDocument1 时已经有一个FileName1了,不再新加一个FileName1了.
怎么来找树中已经有了FileName1这个节点呢?
代码中红色的那句,那样的判断为什么不起作用呢?
dyshadow 2008-07-03
  • 打赏
  • 举报
回复
题目看错,是一个FILE多个DOCUMENT咯。以上代码是一个DOCUMENT对应多个FILE。
那么反一反就可以了。
上面代码里面把FILE改为DOCUMENT,把DOCUMENT改为FILE就可以了。
dyshadow 2008-07-03
  • 打赏
  • 举报
回复
首先:
抽取所有DOCUMENT
Select Distinct Document From table
sqlReader=....
循环读取:
While (sqlReader.Read())
{
TreeNode tnDocument=new TreeNode(sqlReader["Document"].tostring());
treeView1.Nodes.Add(tnDocument);
sql="Select File Form table " +
"Where Document=" + sqlReader["Document"].tostring();
sqlReaderFile=.....
While (sqlReaderFile.Read())
{
TreeNode tnFile=new TreeNode(sqlReaderFile["File"].toString());
tnDocument.Nodes.Add(tnFile);
}

}

就好了。
newlist009 2008-07-03
  • 打赏
  • 举报
回复
up
dahai99007 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fly_goldfish 的回复:]
想象树丛无到有的生成过程。
假如取回来的数据是
FileName Document
root1 node1 1
root1 node2 2
roor2 node3 3
root1 root4 4

一行行读嘛,
1来了,什么都没有,那就是
root1
¦
-- node1
2来了,root1已经存在
root1
¦
-- node1
¦
-- node2
3来了,root2不存在

[/Quote]

就是这个意思,这样就有思路,1来了什么都没有,那我this.treeView1.Nodes.Add(root1);
那下一步呢我怎么用代码把node1加到root1下边呢?
this.treeView1.Nodes["root1"]下边好象没有添加子节点的方法了,是我没找到吗?
dahai99007 2008-07-03
  • 打赏
  • 举报
回复
你意思是我写两个sql语句,分别取到FileName和Document,然后再加到树的节点上去?
取到那FileName和Document没有问题,关键是我怎么把Document加到FileName节点的下边?
楼上的哥们能不能详细点?
我想实现的效果是这样的:
FileName1
...Document1
...Document2
FileName2
...Document3
...Document4
...Document5
FileName3
...Document6
FileName4
...Document7
zhao8848jun 2008-07-03
  • 打赏
  • 举报
回复
表设计时加上父节点
万小萌 2008-07-03
  • 打赏
  • 举报
回复
想象树丛无到有的生成过程。
假如取回来的数据是
FileName Document
root1 node1 1
root1 node2 2
roor2 node3 3
root1 root4 4

一行行读嘛,
1来了,什么都没有,那就是
root1
|
-- node1
2来了,root1已经存在
root1
|
-- node1
|
-- node2
3来了,root2不存在
root1
|
-- node1
|
-- node2
root2
|
-- node3
4来了,root2已经存在
root1
|
-- node1
|
-- node2
root2
|
-- node3
|
-- node4
那现在问题是不是就简单了?
|
--

xhan2000 2008-07-03
  • 打赏
  • 举报
回复
sql语句的构造问题

1对多的关系?为什么不分表?
dahai99007 2008-07-03
  • 打赏
  • 举报
回复
我说的帅哥美女不仅仅指的那个帅气、漂亮的意思。
是对各位尊称!
哥们你别误会!
更希望你是一种幽默,呵呵...
wonderfullyh 2008-07-03
  • 打赏
  • 举报
回复
不是帅哥,帮不了你了。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧