在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败,

为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载TreeView。

在TreeView每个结点的前面都有个"+"号,点击这个”+“号触发的事件是OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ,在刚开始加载TreeView的时候,如果结点下面

还有子节点的话,只加载一个子节点;在点击”+“号,触发OnTreeNodeExpanded事件的时候,再加载该结点下的

所有子节点,这样速度就很快了。

 

1、前台的显示TreeView代码如下:




1. <asp:TreeView ID="TreeView1" runat="server" Font-Size="Medium" OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ForeColor="LightSlateGray" LeafNodeStyle-ForeColor="#3333ff" ShowLines="true"  ExpandDepth="1">  
2. "selectNode" />  
3.            </asp:TreeView>

注明:可以通过selectNode控制选择结点的背景颜色。

 

2、后台的TreeNodeExpanded事件代码如下:

 




1. protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)  
2.     {  
3. //只显示当前结点的子节点,其他结点闭合  
4. null;  
5. if (e.Node.Parent == null)  
6.         {  
7.             tnc = ((TreeView)sender).Nodes;  
8.         }  
9. else  
10.             tnc = e.Node.Parent.ChildNodes;  
11. foreach (TreeNode node1 in tnc)  
12.         {  
13. if (node1 != e.Node)  
14.             {  
15.                 node1.Collapse();  
16.             }  
17.         }  
18.         TreeNode node = (TreeNode)e.Node;  
19. //其中tempNodeInfo包括结点的信息  
20. string tempNodeInfo = node.Value;  
21. if (!tempNodeInfo.StartsWith("-1"))  
22.         {  
23. //先将上次绑定的一个节点信息删除掉  
24.             node.ChildNodes.Clear();  
25. string[] tempNodeFlag = tempNodeInfo.Split(',');  
26. if (tempNodeFlag[2].ToString().Equals("小区号"))  
27.             {  
28. "1", node, Convert.ToInt32(tempNodeFlag[4]), "1");  
29.             }  
30. else if (tempNodeFlag[2].ToString().Trim().Equals("楼号"))  
31.             {  
32. "2", node, Convert.ToInt32(tempNodeFlag[4]), Convert.ToInt32(tempNodeFlag[5]), "1");  
33.             }  
34. else if (tempNodeFlag[2].ToString().Trim().Equals("单元号"))  
35.             {  
36. "3", node, Convert.ToInt32(tempNodeFlag[4]), Convert.ToInt32(tempNodeFlag[5]), Convert.ToInt32(tempNodeFlag[6]), "1");  
37.             }  
38.         }  
39.     }


注明:其中的PopulateTreeViewFromFloorName、PopulateTreeViewFromUnit、

PopulateTreeViewFromRoomUserTree的第四个参数”1“是TreeView1_TreeNodeExpanded事件触发

的标志位,根据这个标志位延迟加载。

通过这样的思路就可以实现异步延迟加载的效果。

以上内容转自: