您的位置:首页 > 其它

Treeview查找节点方法

2012-07-04 15:07 351 查看
写asp.net时,经常操作 TreeView 控件。经常需要找到他的某一个节点,

操作方法是:

/// <summary>

/// 获取 指定value值的节点

/// </summary>

/// <param name="tnParent">指定节点</param>

/// <param name="strValue">value值</param>

/// <returns></returns>

private TreeNode FindNodeByValue(TreeNode tnParent, string strValue)

{

if (tnParent == null) return null;

if (tnParent.Value == strValue) return tnParent;

TreeNode tnRet = null;

foreach (TreeNode tn in tnParent.ChildNodes)

{

tnRet = FindNodeByValue(tn, strValue);

if (tnRet != null) break;

}

return tnRet;

}

/// <summary>

/// 获取 指定Text值的节点

/// </summary>

/// <param name="tnParent">指定节点</param>

/// <param name="strValue">Text值</param>

/// <returns></returns>

private TreeNode FindNodeByText(TreeNode tnParent, string strText)

{

if (tnParent == null) return null;

if (tnParent.Text == strText) return tnParent;

TreeNode tnRet = null;

foreach (TreeNode tn in tnParent.ChildNodes)

{

tnRet = FindNodeByText(tn, strText);

if (tnRet != null) break;

}

return tnRet;

}

调用方法:

TreeNode tnRet = null;

foreach( TreeNode tn in TreeView1.Nodes )

{

tnRet = FindNodeByValue(tn, "202020");

if( tnRet != null ) break;

}

tnRet.Text = "更改后的Text";

参考如下:

Treeview查找节点算法
在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;
}
代码转换:
Public Function findnode(ByVal parentnode As TreeNode, ByVal str As String) As TreeNode

Dim thenode As New TreeNode

If (parentnode Is Nothing) Then

Return Nothing

End If

If (parentnode.Text = str) Then

Return parentnode

End If

Dim node As New TreeNode

For Each node In parentnode.Nodes

thenode = findnode(node, str)

If thenode.Text = str Then

Exit For

End If

Next

Return thenode

End Function
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: