TreeView 定位的问题
请教treeview定位的问题
请教高手,怎样实现通过输入节点名或节点index将treeview自动定位到那里?比如说我的treeview的结构是1、1.1、1.2、2、3、4。。。我通过输入1.1,如何将它定位到1.1那个节点。
1 楼
在网上找了很久都没找到答案,所以上这里来问问,希望高手能帮帮忙。谢谢
2 楼
我生成树的代码如下:
TreeNode newroot = new TreeNode();
newroot.ID="";
newroot.Text="总目录";
CatalogTree.Nodes.Add(newroot);
FillTree(newroot,ds);//ds为一dataset
private void FillTree(TreeNode root,DataSet ds)
{
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
TreeNode newroot = new TreeNode();
newroot.ID=ds.Tables[0].Rows[i]["catalogid"].ToString().Trim();
newroot.Text=newroot.ID.ToString().Trim()+"."+ds.Tables[0].Rows[i]["catalogname"].ToString().Trim();
root.Nodes.Add(newroot);
FillTree(newroot,ds1);
}
}
3 楼
foreach(TreeNode tn in e.Node.Nodes )
{
if(tn.Text=="xxxx")
{
tn.IsSelected = true;
}
}
4 楼
如果是web的方式话且用的是microsoft webcontrols的话,可以通过SelectedNodeIndex来设置;
而form方式的话,没有简便的方法。
5 楼
改进了一下
private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
{
foreach(System.Windows.Forms.TreeNode tn in nodes)
{
if(tn.Text==textBox1.Text)
{
treeView1.SelectedNode = tn;
}
GetAllNode(tn.Nodes);
}
}
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
GetAllNode(treeView1.Nodes);
}
6 楼
这个问题确实比较麻烦,你可以通过继承treeview来实现记录其索引结构,然后实现他的查找方法。
或者你把目录结构定义在数据库表中,在初始化树把他的结构位置绑定到treeview的TAG属性也可以。
7 楼
改进了一下
private bool GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
{
foreach(System.Windows.Forms.TreeNode tn in nodes)
{
if(tn.Text==textBox1.Text)
{
treeView1.SelectedNode = tn;
return true;
}
if (true == GetAllNode(tn.Nodes))
{
return true;
}
}
return false;
}
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
GetAllNode(treeView1.Nodes);
}
8 楼
好,先谢各位了,我先看看。
9 楼
我搞的是web程序,我试过用SelectedNodeIndex,但没搞定,可能不会用,能详细说一说吗?
10 楼
arice1983(一粒米),我的Node没IsSelected属性,Treeview也没SelectedNode,这是不是因为我用的是webcontrols的缘故?还是其他原因呢?谢谢
11 楼
http://adandelion.cnblogs.com/articles/235681.html
http://www.cnblogs.com/renyu732/archive/2005/09/27/244735.html
12 楼
搞了几天还是没解决。我现在的问题是如何在生成树的时候获取它的index。比如说我的树有三层,第一层第一个节点的第二层的第一个节点的index应该是0.0,我应该怎样获取?
13 楼
执行FindInTree(你的节点的Text)
private void FindInTree(string strNodeName)
{
foreach (TreeNode tn in TreeView1.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;
}
TreeView1.SelectedNodeIndex = strIndex;
}
14 楼
谢谢古道热肠。看起来应该可以实现。
我先试试,确定行了再结贴。
谢谢各位。
15 楼
行了,谢谢各位。
结贴:)