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 }