TreeView的異步延時加載

TreeView的延時加載node

在使用TreeView控件的時候,若是數據量太大,這個TreeView控件加載會很慢,有時甚至加載失敗,curl

爲了更好的使用TreeView控件加載大量的數據,採用異步延遲加載TreeView。異步

在TreeView每一個結點的前面都有個"+"號,點擊這個」+「號觸發的事件是OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ,在剛開始加載TreeView的時候,若是結點下面this

還有子節點的話,只加載一個子節點;在點擊」+「號,觸發OnTreeNodeExpanded事件的時候,再加載該結點下的url

全部子節點,這樣速度就很快了。參考了「假面Wilson」 博文,並進行了功能增長。spa

aspx代碼code

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

 

aspx.cs代碼server

 1     private void LoadNewTree()
 2     {
 3         DataTable dtp = pagBLL.GetList(" superfuncid=0  order by sort asc").Tables[0];
 4         if (dtp.Rows.Count > 0)
 5         {
 6             //首先清除樹型控件內的結點
 7             this.TreeView1.Nodes.Clear();
 8             for (int i = 0; i < dtp.Rows.Count; i++)
 9             {
10 
11                 //實例出一個結點
12                 TreeNode Node = new TreeNode();
13                 Node.Text = dtp.Rows[i]["funcname"].ToString();
14                 Node.Value = dtp.Rows[i]["pagefuncid"].ToString();
15                 Node.ToolTip = dtp.Rows[i]["funcurl"].ToString();
16                 Node.ImageUrl = "../../" + dtp.Rows[i]["imageurl"].ToString(); 
17                 this.TreeView1.Nodes.Add(Node);//增長父節點,這時直接往樹TreeView1上加
18                 this.LoadAddSign(Node.ChildNodes,Convert.ToInt32(dtp.Rows[i]["pagefuncid"].ToString()));
19                 TreeView1.CollapseAll();
20 
21             }
22         }
23     }
 1     /// <summary>
 2     /// 用於加載顯示 樹形控件 +號的,加載下面的一個節點。
 3     /// </summary>
 4     /// <param name="Conn"></param>
 5     /// <param name="tn"></param>
 6     /// <param name="DeptId"></param>
 7     private void LoadAddSign( TreeNodeCollection tn, int DeptId) 
 8     {
 9         DataTable table = pagBLL.GetList(" superfuncid=" + DeptId + "  order by sort asc").Tables[0];
10         if (table.Rows.Count > 0)
11         {
12             //加載"一個"1級節點,就是爲了顯示 + 號
13             tn.Add(new TreeNode());
14 
15         }
16     }
 1     /// <summary>
 2     /// 點擊 + 號是節點展開事件
 3   /// 點擊某個節點合併其餘節點
 4     /// </summary>
 5     /// <param name="sender"></param>
 6     /// <param name="e"></param>
 7     protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
 8     {
 9 
10         TreeNode node = e.Node;
11         //點擊節點關閉其餘節點
12         TreeNodeCollection ts=null;
13         if(node.Parent==null)
14           {
15                ts=((TreeView)sender).Nodes;
16            }
17          else
18           {
19                 ts=node.Parent.ChildNodes;
20              }
21 
22           foreach(TreeNode item in ts)
23          {
24               if(item!=node)
25                  {
26                       item.Collapse();
27                   }
28              }
29 
30 
31         if (node.Expanded == true)
32         {
33             string bm = e.Node.Value.ToString();
34             DataTable table = pagBLL.GetList(" superfuncid=" + bm + "  order by sort asc").Tables[0];
35 
36             node.ChildNodes.Clear(); //清除以前加載的空節點。
37             if (table.Rows.Count > 0)
38             {
39                 for (int i = 0; i < table.Rows.Count; i++)
40                 {
41                     TreeNode Node = new TreeNode();
42                     Node.Text = table.Rows[i]["funcname"].ToString();
43                     Node.Value = table.Rows[i]["pagefuncid"].ToString();
44                     Node.ToolTip = table.Rows[i]["funcurl"].ToString();
45                     Node.ImageUrl = "../../" + table.Rows[i]["imageurl"].ToString();
46                     node.ChildNodes.Add(Node);//增長父節點,這時直接往樹TreeView1上加
47                     this.LoadAddSign(Node.ChildNodes, Convert.ToInt32(table.Rows[i]["pagefuncid"].ToString()));
48                 }
49 
50             }
51         }
52 
53     }
相關文章
相關標籤/搜索