书中例子:显示数状图调用下面的递归:
我有点不明白:第一次调用InitTree时,假设DataRow [] rows =... 有二个以上的值,然后执行到InitTree时,再调用InitTree,再执行DataRow [] rows ...不是把第一次的数据的结构覆盖了吗,这样第一次的第一条数据后面的记录就执行不下去了,看不懂,望高手指教,难道每次DataRow [] rows 的都是新的不覆盖吗 // 从DataSet中取数据建树
// 从根节点开始递归调用显示子树
private void InitTree(TreeNodeCollection Nds,string parentId)
{
TreeNode tmpNd;
DataRow [] rows = data.Tables[0].Select("ParentId='" + parentId + "'"); foreach(DataRow row in rows)
{
tmpNd = new TreeNode();
tmpNd.ID = row["NodeId"].ToString();
tmpNd.Text = row["NodeName"].ToString();
tmpNd.NavigateUrl = row["Url"].ToString();
Nds.Add(tmpNd);
InitTree(tmpNd.Nodes, tmpNd.ID);
}
}
我有点不明白:第一次调用InitTree时,假设DataRow [] rows =... 有二个以上的值,然后执行到InitTree时,再调用InitTree,再执行DataRow [] rows ...不是把第一次的数据的结构覆盖了吗,这样第一次的第一条数据后面的记录就执行不下去了,看不懂,望高手指教,难道每次DataRow [] rows 的都是新的不覆盖吗 // 从DataSet中取数据建树
// 从根节点开始递归调用显示子树
private void InitTree(TreeNodeCollection Nds,string parentId)
{
TreeNode tmpNd;
DataRow [] rows = data.Tables[0].Select("ParentId='" + parentId + "'"); foreach(DataRow row in rows)
{
tmpNd = new TreeNode();
tmpNd.ID = row["NodeId"].ToString();
tmpNd.Text = row["NodeName"].ToString();
tmpNd.NavigateUrl = row["Url"].ToString();
Nds.Add(tmpNd);
InitTree(tmpNd.Nodes, tmpNd.ID);
}
}
解决方案 »
- InstallShield 2010如何打包.net Framework 3.5程序?
- C#form中画图,并保存成图片格式,其中form窗体带有滚动条
- c#中窗体之间的异步调用
- C#窗体初始化时,改变透明度,运行时怎么会卡卡的?
- vb6 To VB.Net/C# 数据类型的对应。
- 寻求做bbS信息提取的朋友
- !!!!!!!!!!!!!!!请教有经验的朋友一个问题
- 如何远程创建数据库,还请各位高手指教
- 高手请进:用Dns.Resolve解析地址缓慢的问题(急!!!!)
- 怎么解决这个错误!! 高手请指教,万分感谢谢!! 使用命令行选项“/keyfile”或适当的项目设置代替“AssemblyKeyFile”
- codebehind:using System.Runtime.InteropServices之后还需要添加什么.NET组件吗?
- C#中Socket连接为什么总是丢失??
qryexec(qry1,'select * from bumen order by bmm');
TreeView1.Items.Clear ; //TreeView1是中文,TreeView2是ID,隐藏的
TreeView2.Items.Clear ;
inittree(qry1,TreeView1,TreeView2,0,true);procedure inittree(qry:tadoquery;treeview:ttreeview;treeview1:ttreeview;parentid:integer;isExpanded:boolean);
var i:integer;
MyTreeNode,MyTreeNode1: TTreeNode;
tmpqry:tadoquery;
abc:string;
begin
if parentid=0 then
begin
MyTreeNode:=treeview.Items.Add(nil,'所有部门');
MyTreeNode.SelectedIndex :=1;
MyTreeNode1:=treeview1.Items.Add(nil,'id部门');
MyTreeNode1.SelectedIndex :=1;
end;
tmpqry:=tadoquery.Create(nil);
tmpqry:=qry;
tmpqry.Filter:='dirid='''+inttostr(parentid)+'''';
tmpqry.Filtered:=true;
tmpqry.first;
while not tmpqry.Eof do
begin
MyTreeNode:=treeview.Items.AddChild(MyTreeNode,tmpqry.fieldbyname('bm').asstring);
MyTreeNode1:=treeview1.Items.AddChild(MyTreeNode1,tmpqry.fieldbyname('id').asstring);
MyTreeNode.SelectedIndex:=1;
MyTreeNode1.SelectedIndex:=1;
inittree(tmpqry,treeview,treeview1,tmpqry.fieldbyname('id').AsInteger ,true);
tmpqry.Next;
end;
end;
InitTree(tmpNd.Nodes, tmpNd.ID);传的参数应该是下一层结点