TreeView is populated on demand to achieve better performance.
1: using System;
2: using System.Web.UI.WebControls;
3: using System.Xml;
4: using System.Collections;
5: using System.Collections.Generic;
6: using Microsoft.SharePoint;
7: using System.Text.RegularExpressions;
8:
9: namespace YourNameSpace.Controls
10: {
11: public class SPSTreeViewNavigator : TreeView
12: {
13: private SPWeb _rootWeb;
14: public string NODE_IMAGE_URL = "/_layouts/Images/cat.gif";
15:
16: public SPWeb RootWeb
17: {
18: get { return _rootWeb; }
19: set { _rootWeb = value; }
20: }
21:
22: protected override void OnLoad(EventArgs e)
23: {
24: base.OnLoad(e);
25: InitializeTreeView();
26: }
27:
28: //Populate TreeView on demand
29: void DataViewTreeView_TreeNodePopulate(object sender, TreeNodeEventArgs e)
30: {
31: PopulateChildNodes(e.Node);
32: }
33:
34: void InitializeTreeView()
35: {
36: this.Height = Unit.Percentage(100);
37: this.Width = Unit.Percentage(100);
38: this.ShowCheckBoxes = TreeNodeTypes.All;
39: this.EnableClientScript = true;
40: this.ShowExpandCollapse = true;
41: //View State must be enable
42: this.EnableViewState = true;
43: this.ShowLines = true;
44: this.TreeNodePopulate += DataViewTreeView_TreeNodePopulate;
45: this.NodeStyle.ImageUrl = NODE_IMAGE_URL;
46: if (!this.Page.IsPostBack)
47: {
48: this.Nodes.Clear(); PopulateRootNode(this);
49: }
50: }
51:
52: void PopulateChildNodes(TreeNode node)
53: {
54: Guid webGuidId = new Guid(node.Value);
55: using (SPSite spSite = new SPSite(_rootWeb.Site.ID))
56: {
57: using (SPWeb web = spSite.OpenWeb(webGuidId))
58: {
59: foreach (SPWeb spWeb in web.Webs)
60: {
61: PopulateTreeNode(spWeb, node);
62: }
63: }
64: }
65: }
66:
67: private void PopulateTreeNode(SPWeb web, TreeNode node)
68: {
69: TreeNode newNode = new TreeNode(web.Title, web.ID.ToString(),
70: NODE_IMAGE_URL, web.ServerRelativeUrl, string.Empty); newNode.PopulateOnDemand = true;
71: newNode.Expanded = false;
72: newNode.SelectAction = TreeNodeSelectAction.SelectExpand;
73: node.ChildNodes.Add(newNode);
74: }
75:
76: //Populate root node and next level child nodes
77: void PopulateRootNode(TreeView treeView)
78: {
79: TreeNode node = new TreeNode();
80: SPWeb web = _rootWeb; node.Text = web.Title;
81: node.Value = web.ID.ToString();
82: node.NavigateUrl = web.ServerRelativeUrl;
83: node.PopulateOnDemand = true;
84: node.ShowCheckBox = true;
85: node.Expand();
86: treeView.Nodes.Add(node);
87: }
88: }
89: }
90:
91:
92:
Following is example of client code. Create instance of SPSTreeViewNavigator control and initialize it's RootWeb property with SPWeb object.
1: SPSTreeViewNavigator treeView = new SPSTreeViewNavigator();
2: treeView.RootWeb = SPContext.Current.Site.OpenWeb();
3: Controls.Add(treeView);
Following image shows SPSTreeViewNavigator in action, with TreeView fully expanded.
Using KetticTreeView control create custom navigation
ReplyDelete