在使用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事件触发
的标志位,根据这个标志位延迟加载。
通过这样的思路就可以实现异步延迟加载的效果。
以上内容转自: