我从另一个窗体传了一个结点的ID,放在当前窗体的一个文本框TextBox1中,
然后想在显示树的同时,将与此值相等的ID的结点置为选中的状态。
但每次打开此窗体时,虽然值是传到TextBox1中了,
而且单步调试也运行了那一句:Node.Checked=true;
但运行完成时,那个结点就是不置于选中状态,急啊!
哪位帮忙解决一下,或者有相同的例子发上来参考一下。
我的代码://显示最高层结点
private void ShowTree()
{
string sql;
DataTable tmpdt=new DataTable();
sql="select * from Table where PID='0'";
tmpdt=dbcls.SqlQueryDB(sql);
for(int i=0;i<tmpdt.Rows.Count;i++)
{
TreeNode tmpnd= new TreeNode();
tmpnd.Tag=tmpdt.Rows[i]["ID"].ToString();
tmpnd.Text=tmpdt.Rows[i]["Name"].ToString();
treeView1.Nodes.Add(tmpnd);
if(tmpnd.Tag.ToString()==this.textBox1.Text)
{
tmpnd.Checked=true;
}
InitTree(tmpnd.Nodes,tmpdt.Rows[i]["ID"].ToString());
}
treeView1.ExpandAll();//此段用过也不行。
// foreach (TreeNode childNode in this.treeView1.Nodes)
// {
// if(childNode.Tag.ToString()==this.textBox1.Text)
// {
// childNode.Checked=true;
// }
// }
//
}
//递归显示树的子结点
private void InitTree(TreeNodeCollection Nds,string ParentId)
{
DataTable dtTree =new DataTable();
string sqlTree; sqlTree = "select * from Table where PID='"+ ParentId +"'";
dtTree=dbcls.SqlQueryDB(sqlTree); for(int i=0;i<dtTree.Rows.Count;i++)
{
TreeNode tmpnd= new TreeNode();
tmpnd.Tag =dtTree.Rows[i]["ID"].ToString();
tmpnd.Text=dtTree.Rows[i]["Name"].ToString();
if(tmpnd.Tag.ToString()==this.textBox1.Text)
{
tmpnd.Checked=true;
}
Nds.Add(tmpnd);
InitTree(tmpnd.Nodes,dtTree.Rows[i]["ID"].ToString());
}
}

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4164/4164455.xml?temp=.4819757
      

  2.   

    这个问题我自己已经解决了,多谢上面两位。
    现在的问题是:怎么样定义一个全局的变量把这个node的ID值存储起来,当调用其他窗体时,能够获取到这个值,并将该窗体中的同一个tree的node置为选中状态。
      

  3.   

    C#没有全局变量,能实现相同功能的是类的public static变量
      

  4.   

    Application["ID"]= .......;
      

  5.   

    to  MyLf(不睡觉的鱼):
    这样定义也不行,当赋值后,然后在另外一个窗体提取这个值时,为Nullto syeerzy:
    这是winform!
      

  6.   

    多谢 MyLf的提醒,已经解决了。