


















权限分配当然连接数据了,就会用到Treeview这个控件。它的节点ID肯定绑到数据库表里的ID了,怎么得到 Treeview里的全部节点的ID。
for (int i = 0; i < TreeView1.Nodes.Count; i++)
{
if (TreeView1.Nodes[i].Selected == true)
{
Response.Write(TreeView1.Nodes[i].Value.ToString());
}
}
foreach (TreeNode tree in TreeView1.Nodes)
{
if (tree.Checked == true)
{
Response.Write(tree.Value.ToString());
}
}这两个只能取到根节点的节点ID。子节点怎么办?
从网上查了下,基本上就是这样做:
在TreeView查找某一节点,通常有两种方法,一种是递归的,一种不是递归,但都是深度优先算法。其中,非递归方法效率高些,而递归算法要简洁一些。
第一种,递归算法,代码如下:
private TreeNode FindNode( TreeNode tnParent, string strValue )
{
if( tnParent == null ) return null;
if( tnParent.Text == strValue ) return tnParent;
TreeNode tnRet = null;
foreach( TreeNode tn in tnParent.Nodes )
{
tnRet = FindNode( tn, strValue );
if( tnRet != null ) break;
}
return tnRet;
}
第二种,非递归算法,代码如下:
private TreeNode FindNode( TreeNode tnParent, string strValue )
{
if( tnParent == null ) return null;
if( tnParent.Text == strValue ) return tnParent;
else if( tnParent.Nodes.Count == 0 ) return null;
TreeNode tnCurrent, tnCurrentPar;
//Init node
tnCurrentPar = tnParent;
tnCurrent = tnCurrentPar.FirstNode;
while( tnCurrent != null && tnCurrent != tnParent )
{
while( tnCurrent != null )
{
if( tnCurrent.Text == strValue ) return tnCurrent;
else if( tnCurrent.Nodes.Count > 0 )
{
//Go into the deepest node in current sub-path
tnCurrentPar = tnCurrent;
tnCurrent = tnCurrent.FirstNode;
}
else if( tnCurrent != tnCurrentPar.LastNode )
{
//Goto next sible node
tnCurrent = tnCurrent.NextNode;
}
else
break;
}
//Go back to parent node till its has next sible node
while( tnCurrent != tnParent && tnCurrent == tnCurrentPar.LastNode )
{
tnCurrent = tnCurrentPar;
tnCurrentPar = tnCurrentPar.Parent;
}
//Goto next sible node
if( tnCurrent != tnParent )
tnCurrent = tnCurrent.NextNode;
}
return null;
}
程序调用,如下:
TreeNode tnRet = null;
foreach( TreeNode tn in yourTreeView.Nodes )
{
tnRet = FindNode( tn, yourValue );
if( tnRet != null ) break;
}
===================================================================================或:
private void button1_Click_1(object sender, EventArgs e)
{
TreeView tree;
foreach (TreeNode node in tree.Nodes)
{
GetNode(node);
}
}
void GetNode(TreeNode node)
{
foreach (TreeNode n in node.Nodes)
{
Console.WriteLine(n.Name);
GetNode(n);
}
}
我试了下,方法是对的,但是具体代码不太对,运行出错。哎,只好自己写,下面是我写的,测试过了,可以运行。写得不好,有点麻烦,用的递归
public void GetNode(TreeNodeCollection tc)
{
foreach (TreeNode TNode in tc)
{
if (TNode.Parent == null)
{
Response.Write(TNode.Value.ToString());
}
if (TNode.ChildNodes.Count == 0)
{
Response.Write(TNode.Value.ToString());
}
else
{
GetNode(TNode.ChildNodes);
}
}
}
调用:
TreeNodeCollection tc = TreeView1.Nodes;
GetNode(tc);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。