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
操作方法是:
/// <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
相关文章推荐
- 如何C#中实现在TreeView查找某一节点(两种方法)
- 可双向并指定开始结点的treeview节点遍历查找方法类
- 如何C#中实现在TreeView查找某一节点(两种方法)
- Treeview查找节点方法
- Treeview查找节点方法
- 如何C#中实现在TreeView查找某一节点(两种方法)
- 用C#在ASP.NET 2.0 的 TreeView 中查找某一节点
- 保持TreeView父子节点的CheckBox节点状态一致的一种方法
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- Delphi 中递归生成TreeView节点的方法
- <转>如何C#中实现在TreeView查找某一节点
- wpf treeview 查找节点时 节点多的时候,出现ContainerFromItem返回null
- [转载]JQUERY的父,子,兄弟节点查找方法
- SQL 双亲节点查找所有子节点的实现方法
- 二叉搜索树的相关操作:插入节点,删除节点,排序,查找,最大值,最小值,前序,中序,后序遍历(主要用到递归的方法)
- JQUERY的父,子,兄弟节点查找方法
- TreeView返回选中节点的下属节点值得方法
- C#中遍历TreeView并查找和选定节点
- bootstrap treeview 扩展addNode方法动态添加子节点的方法
- TreeView返回节点值的方法