之前我用frameset把版面分割成两块,左边lefttreeview.aspx页面中建了一个树结构,右边是students.aspx连接数据库显示左边点选的节点值所查询出来的表,显示是用DataGrid,在左边的TreeView1_SelectedNodeChanged()方法中我有两个语句
 protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
 {
     Application["tree"] = TreeView1.SelectedValue;
     TreeView1.SelectedNode.NavigateUrl = "students.aspx";
 }
students.aspx页面中,我在select语句中用Application["tree"].ToString()接收它传的值,而在运行时,为什么我的节点都要点两次才能显示右边页面,我一直都想不明白,感觉代码应该在我点选一次后就会运行显示出来啊,请高手指点!还有为什么我第一次点之后节点就会全部收缩回去,而我在Page_Load()中用了TreeView1.ExpandAll();才全部展开!

解决方案 »

  1.   

    我碰到过,没有解决,期待高手,我最后是用table实现的,刚初来的时候,用treeview 现在用ajax+div实现树
      

  2.   

    Application["tree"] 用application 不好吧
    直接传递参数啊
      

  3.   

    你的树控件是怎么添加的?添加时有没有设置NavigteUrl属性。
    从你贴出的程序判断,第一次选择时设置的该属性,第二次选择时才刷新的students.aspx
    另外你应该有Target属性要设置吧?从你第一次点节点全部缩回去这点判断,真的填充时没有设置NavigetUrl属性,这样回传请求的本页面,重新填充树,看上去就都缩回去了。
      

  4.   

    我是从数据库中循环添加的,本来之前有在新建NODE节点时就有设置NavigteUrl的,我也知道在新建时设置可以不用点两次,而且有设置target,但因为我要在另一个页面中接收我点的那个节点的值,我在它树的方法里添加了Application["tree"] 来存TreeView1.SelectedValue,选择的那一节点值,而如果在新建时就设置了NavigteUrl的话,就会出错,因为,你第一次点节点的话,它就会马上跳到那个页面,而树TreeView1_SelectedNodeChanged()方法里面的是后执行,这样值就没传过去,而Application["tree"]是空的,页面就跳出异常了!
    大家能听懂我的意思吗??
      

  5.   

    如果不用Application那有什么更好的方法来把我一个页面我选的值,传到另一个页面中!请指教!
      

  6.   

    tree.NavigeteUrl = string.Format("aa.aspx?P={0}", TreeView1.SelectedValue)另一个界面用Request["P"]接受参数值