在使用TreeView控制項的時候,如果資料量太大,這個TreeView控制項載入會很慢,有時甚至載入失敗,
為了更好的使用TreeView控制項載入大量的資料,採用非同步消極式載入TreeView。
在TreeView每個結點的前面都有個"+"號,點擊這個”+“號觸發的事件是OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ,在剛開始載入TreeView的時候,如果結點下面
還有子節點的話,只載入一個子節點;在點擊”+“號,觸發OnTreeNodeExpanded事件的時候,再載入該結點下的
所有子節點,這樣速度就很快了。
1、前台的顯示TreeView代碼如下:
<asp:TreeView ID="TreeView1" runat="server" Font-Size="Medium" OnTreeNodeExpanded="TreeView1_TreeNodeExpanded" ForeColor="LightSlateGray" LeafNodeStyle-ForeColor="#3333ff" ShowLines="true" ExpandDepth="1"><br /> <SelectedNodeStyle CssClass="selectNode" /><br /> </asp:TreeView>
註明:可以通過selectNode控制選擇結點的背景顏色。
2、背景TreeNodeExpanded事件代碼如下:
protected void TreeView1_TreeNodeExpanded(object sender, TreeNodeEventArgs e)<br /> {<br /> //只顯示當前結點的子節點,其他結點閉合<br /> TreeNodeCollection tnc = null;<br /> if (e.Node.Parent == null)<br /> {<br /> tnc = ((TreeView)sender).Nodes;<br /> }<br /> else<br /> tnc = e.Node.Parent.ChildNodes;<br /> foreach (TreeNode node1 in tnc)<br /> {<br /> if (node1 != e.Node)<br /> {<br /> node1.Collapse();<br /> }<br /> }<br /> TreeNode node = (TreeNode)e.Node;<br /> //其中tempNodeInfo包括結點的資訊<br /> string tempNodeInfo = node.Value;<br /> if (!tempNodeInfo.StartsWith("-1"))<br /> {<br /> //先將上次綁定的一個節點資訊刪除掉<br /> node.ChildNodes.Clear();<br /> string[] tempNodeFlag = tempNodeInfo.Split(',');<br /> if (tempNodeFlag[2].ToString().Equals("小區號"))<br /> {<br /> PopulateTreeViewFromFloorName("1", node, Convert.ToInt32(tempNodeFlag[4]), "1");<br /> }<br /> else if (tempNodeFlag[2].ToString().Trim().Equals("樓號"))<br /> {<br /> PopulateTreeViewFromUnit("2", node, Convert.ToInt32(tempNodeFlag[4]), Convert.ToInt32(tempNodeFlag[5]), "1");<br /> }<br /> else if (tempNodeFlag[2].ToString().Trim().Equals("單元號"))<br /> {<br /> PopulateTreeViewFromRoomUserTree("3", node, Convert.ToInt32(tempNodeFlag[4]), Convert.ToInt32(tempNodeFlag[5]), Convert.ToInt32(tempNodeFlag[6]), "1");<br /> }<br /> }<br /> }
註明:其中的PopulateTreeViewFromFloorName、PopulateTreeViewFromUnit、
PopulateTreeViewFromRoomUserTree的第四個參數”1“是TreeView1_TreeNodeExpanded事件觸發
的標誌位,根據這個標誌位消極式載入。
通過這樣的思路就可以實現非同步消極式載入的效果。