一个从数据库生成树的问题(有BCB的源码。我想转成C#或是vc.net)(MFC的不要) 给我个邮箱,我给你一个用C#实现的树,可以直接从数据库中取数生成树。太晚了就给我发邮件。[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public void InitTree(TreeNodeCollection Nds,string parentId,DataSet ds,string TableName) { //从根节点开始递归调用显示子树 dv=new DataView(); TreeNode tmpNd; string intId; dv.Table=ds.Tables[TableName]; dv.RowFilter="ParentId=" + parentId ; foreach(DataRowView drv in dv) { //递归算法从这里开始,主要思想是深度遍历。 tmpNd=new TreeNode(); tmpNd.Tag =drv[0].ToString(); //节点ID tmpNd.Text=drv[2].ToString(); //节点名称 Nds.Add(tmpNd); intId=drv[1].ToString(); //节点的父节点 InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName); } }树的结构就你的那样就可以了 这样子的递归错在哪里?能把结点加入每0层。但进不了后面几层。好像是函数错了。root[i].GetNodeCount(true)>0这样能判断该结点有子结点吗?private void button1_Click(object sender, System.EventArgs e) { TreeNode leaf=new TreeNode(textBox1.Text); leaf.Tag=textBox2.Text; treeView1.BeginUpdate(); addsub(treeView1.Nodes,leaf); treeView1.EndUpdate(); } public void addsub(TreeNodeCollection root,TreeNode leaf) {string text; for(int i=0;i<root.Count;i++) { text=root[i].Text; if(root[i].GetNodeCount(true)>0) addsub(root[i].FirstNode.Nodes,leaf); else if(text==leaf.Tag.ToString()) root[i].Nodes.Add (leaf); } } 这样子就可以了。:)private void button1_Click(object sender, System.EventArgs e) { TreeNode leaf=new TreeNode(textBox1.Text); leaf.Tag=textBox2.Text; treeView1.BeginUpdate(); addsub(treeView1.Nodes,leaf); treeView1.EndUpdate(); } public void addsub(TreeNodeCollection root,TreeNode leaf) {//string text; for(int i=0;i<root.Count;i++) { //text=root[i].Text; if(root[i].GetNodeCount(true)>0) //addsub(root[i].FirstNode.Nodes,leaf); addsub(root[i].Nodes,leaf); else if(root[i].Text==leaf.Tag.ToString()) root[i].Nodes.Add (leaf); } } 怎么做啊 c# 画图问题(紧急) 怎么调用视频采集卡中SDK开发包实现保存视频,抓图,云台等功能,求源码!!!!!急!!!!!有请发送到我邮箱,谢谢[email protected] 真心求助,.NET相关的问题。 Report Viewer 需点击View Report两次才能显示内容?? 无法隐藏的窗体 命运掌握在谁的手中?大家来评国足。 弱弱的一问 多线程的lock只是虚设的吗? TreeView的简单问题。 文件打包成自解压文件怎么实现??? vs.2002能否通过升级安装升到vs.2003
{ //从根节点开始递归调用显示子树
dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables[TableName];
dv.RowFilter="ParentId=" + parentId ;
foreach(DataRowView drv in dv)
{ //递归算法从这里开始,主要思想是深度遍历。
tmpNd=new TreeNode();
tmpNd.Tag =drv[0].ToString(); //节点ID
tmpNd.Text=drv[2].ToString(); //节点名称
Nds.Add(tmpNd);
intId=drv[1].ToString(); //节点的父节点
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString(),ds,TableName);
}
}
树的结构就你的那样就可以了
root[i].GetNodeCount(true)>0这样能判断该结点有子结点吗?private void button1_Click(object sender, System.EventArgs e)
{
TreeNode leaf=new TreeNode(textBox1.Text);
leaf.Tag=textBox2.Text;
treeView1.BeginUpdate();
addsub(treeView1.Nodes,leaf);
treeView1.EndUpdate();
} public void addsub(TreeNodeCollection root,TreeNode leaf)
{string text;
for(int i=0;i<root.Count;i++)
{
text=root[i].Text;
if(root[i].GetNodeCount(true)>0)
addsub(root[i].FirstNode.Nodes,leaf);
else if(text==leaf.Tag.ToString())
root[i].Nodes.Add (leaf);
}
}
private void button1_Click(object sender, System.EventArgs e)
{
TreeNode leaf=new TreeNode(textBox1.Text);
leaf.Tag=textBox2.Text;
treeView1.BeginUpdate();
addsub(treeView1.Nodes,leaf);
treeView1.EndUpdate();
} public void addsub(TreeNodeCollection root,TreeNode leaf)
{//string text;
for(int i=0;i<root.Count;i++)
{
//text=root[i].Text;
if(root[i].GetNodeCount(true)>0)
//addsub(root[i].FirstNode.Nodes,leaf);
addsub(root[i].Nodes,leaf); else if(root[i].Text==leaf.Tag.ToString())
root[i].Nodes.Add (leaf);
}
}