结构类似下面
aaaa
1dfd
1090
2sdd
1dfs
bbbb
1dfdd
1090d
2sddd
1dfsd我现在要实现一个检索功能(只检索子节点)
比如说我要检索包含1的子节点
我有个检索的按钮
点第一下 选中1dfd
点第二下 选中1090
点第三下 选中1dfs
点第四下 选中1dfdd
以此类推
。
当选中1dfsd时,再点下按钮又选中了1dfd,这样就实现了一个循环(其实就类似一本的文本查询)有有大侠帮帮偶啊?谢谢啦
aaaa
1dfd
1090
2sdd
1dfs
bbbb
1dfdd
1090d
2sddd
1dfsd我现在要实现一个检索功能(只检索子节点)
比如说我要检索包含1的子节点
我有个检索的按钮
点第一下 选中1dfd
点第二下 选中1090
点第三下 选中1dfs
点第四下 选中1dfdd
以此类推
。
当选中1dfsd时,再点下按钮又选中了1dfd,这样就实现了一个循环(其实就类似一本的文本查询)有有大侠帮帮偶啊?谢谢啦
//node为根节点
List<treenode> list=new List<treenode>();
if(node.childnode.count!=0)
{
//遍历第一层节点,如aaaa,bbbb
foreach(treenode child in node.childnode)
{
if(child.childnode.count!=0)
{
//遍历1dfd等二级节点
foreach(treenode secondChild in node.childnode)
{
list.add(secondChild);
}
}
}
}
private void FindInTree(string strNodeName)
{
foreach(TreeNode tn in TV_Org.Nodes)
{
if (tn.Text != strNodeName)
{
FindInTree(tn,strNodeName);
}
else
{
ExpandTree(tn);
return;
}
}
}
private void FindInTree(TreeNode objTreeNode,string strNodeName)
{
foreach (TreeNode tn in objTreeNode.Nodes)
{
if (tn.Text != strNodeName)
{
FindInTree(tn,strNodeName);
}
else
{
ExpandTree(tn);
return;
}
}
}
private void ExpandTree(TreeNode objTreeNode)
{
string strIndex = "0";
objTreeNode.Expanded = true;
strIndex = objTreeNode.GetNodeIndex();
while (objTreeNode.Parent is TreeNode)
{
objTreeNode = ((TreeNode)objTreeNode.Parent);
objTreeNode.Expanded = true;
}
TV_Org.SelectedNodeIndex = strIndex;
}
int iCount = treeView1.GetNodeCount(true);
string sSearch = textBox1.Text;
TreeNode node = treeView1.SelectedNode;
for (int i = 0; i < iCount; i++)
{
node = node.NextVisibleNode;
if (null == node)
{
node = treeView1.Nodes[0];
}
if (node.Text.Contains(sSearch))
{
treeView1.SelectedNode = node;
break;
} if(i==iCount-1)
{
MessageBox.Show("没有找到包含查询内容的节点");
}
}
{
int m = 0;
private void button1_Click_1(object sender, EventArgs e)
{
if (m == treeView1.Nodes[0].Nodes.Count)
{
for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
{
treeView1.Nodes[0].Nodes[i].Checked = false;
}
m = 0;
} treeView1.Nodes[0].Nodes[m++].Checked = true;
}
}
{
foreach(TreeNode tn in tv.Nodes)
{
if(FindNode(tv,tn,ID))
{
break;
}
}
}
private bool FindNode(TreeView tv,TreeNode tn,string ID)
{
string s=tn.Text;
if(tn.ID==ID)
{
tv.SelectedNodeIndex=tn.GetNodeIndex();
return true;
}
else
{
bool t=false;
foreach(TreeNode ctn in tn.Nodes)
{
if(FindNode(tv,ctn,ID))
{
t=true;
break;
}
}
return t;
}
}
{
foreach(TreeNode node in tn.Nodes)
{
node.Checked=NodeChecked;
if(node.Nodes.Count>0)
this.FindNodes(node,NodeChecked);
}
}
/// 显示nod结点
/// </summary>
/// <param name="nod">要显示的节点</param>
private void go(ref Node nod)
{
TreeNode father = find(treeView1, nod.ParentId.ToString());
TreeNode son = new TreeNode(); if (father != null)
{
son.Name = nod.Id.ToString();
son.Text = nod.Cmean;
if (nod.state == 0)
{
son.Text += "_(" + nod.lp.ToString() + "," + Convert.ToString(nod.lctr - nod.lp) + ")" + "_(" + Convert.ToString(nod.rctr - nod.rp) + "," + nod.rp.ToString() + ")";
}
else
{
if (nod.state == 1)
{
son.Text += "_(" + nod.lp.ToString() + "," + Convert.ToString(nod.lctr - nod.lp) + ")" + "_(" + Convert.ToString(nod.rctr - nod.rp) + "," + nod.rp.ToString() + ")";
}
else
if (nod.state == 2)
{
//if (nod.ParentId == (nod.Id * 2 + 1))
if (father.Text.IndexOf(")_") >= 0)
son.Text +="_(0,0"+ father.Text.Substring(father.Text.IndexOf(")_"), father.Text.Length - father.Text.IndexOf(")_"));
else
son.Text = "空";
}
} father.Nodes.Add(son);
}
if (nod.lchild != null)
{
go(ref nod.lchild);
}
if (nod.rchild != null)
{
go(ref nod.rchild);
} }
/// <summary>
/// 在Treeview里找到s
/// </summary>
/// <param name="v">treeview</param>
/// <param name="s">结点的内容</param>
/// <returns></returns>
private TreeNode find(TreeView v, string s)
{
foreach (TreeNode no in v.Nodes)
{
if (no.Name == s)
return no;
else
return can(no, s);
}
return null;
}
/// <summary>
/// 在no里找s
/// </summary>
/// <param name="no">开始的结点</param>
/// <param name="s">结点的内容</param>
/// <returns></returns>
private TreeNode can(TreeNode no, string s)
{
foreach (TreeNode node in no.Nodes)
{
if (node.Name == s)
return node;
}
foreach (TreeNode node in no.Nodes)
{
if (node.Nodes.Count > 0)
return can(node, s);
}
return null;
}
我的毕设
我的是循环的,不过没考虑节点缩起来的情况,开始加个expand就ok了,呵呵。