我有一个TreeView: <asp:TreeView runat="server" ID="CodeTree" ShowLines="True" EnableClientScript=true ExpandDepth="1" Target=_self PopulateNodesFromClient="true" OnTreeNodePopulate="CodeTree_TreeNodePopulate"
>后台代码:protected void CodeTree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
LoadNodeTree(e.Node, node.ChildNodeList);
e.Node.Expand();
}
}现在跟踪发现,第一次点"+"号时,响应了Populate事件,并执行了其中的代码,进行了节点填充。此时,e.Node.ChildNodes.Count也大于0了。但是e.Node.Expand()方法没有反应。再点击第二次时,又进入了此方法,此时e.Node.ChildNodes.Count居然又是0了,再次填充后,e.Node.Expand()方法有了作用。
也就是说,一个节点总要点两次才能填充好子节点,不知是何故?
>后台代码:protected void CodeTree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
LoadNodeTree(e.Node, node.ChildNodeList);
e.Node.Expand();
}
}现在跟踪发现,第一次点"+"号时,响应了Populate事件,并执行了其中的代码,进行了节点填充。此时,e.Node.ChildNodes.Count也大于0了。但是e.Node.Expand()方法没有反应。再点击第二次时,又进入了此方法,此时e.Node.ChildNodes.Count居然又是0了,再次填充后,e.Node.Expand()方法有了作用。
也就是说,一个节点总要点两次才能填充好子节点,不知是何故?
LoadNodeTree(e.Node, node.ChildNodeList);
EnableClientScript=false 就可以了。但是接着又有另一个问题,因为树的节点比较多,在节点多时,如果每选择一个节点,则会回发,这样会好慢。于是,又改成了在点击节点时不产生回发。但这样,就需要自己在客户端实现选择节点时样式的变化(因为已禁用了客户端脚本)。当自己实现了选择节点时样式的更换后,又发现,当在服务器端选择一个节点时(node.selected=true),在客户端根本无从知道,于是这时就会出现树上有两个节点都是在选中状态
~能把关于这个的前后台关键代码发给我不?[email protected] 谢谢!