Treeview Navigation是一个用树形结构显示当前站点导航结构的SharePoint WebPart, 详细情况请看:http://www.cnblogs.com/rickie/archive/2004/12/18/78665.html 。
Treeview Navigation是通过作者自己写的一个MyTreeView控件来显示的,但这个控件没有开放源代码。我就用Microsoft.Web.UI.WebControls.TreeView自己写了一个简单的Treeview Navigation,代码如下:
[SharePoint]简单实现Treeview Navigation[System.ComponentModel.Description("AreaTreeView")]
[SharePoint]简单实现Treeview Navigation    
public class AreaTreeView : System.Web.UI.UserControl, SmartPart.IUserControl
{
[SharePoint]简单实现Treeview Navigation        
protected System.Web.UI.WebControls.Label ErrorMessage;
[SharePoint]简单实现Treeview Navigation        
protected Microsoft.Web.UI.WebControls.TreeView AreaList;
[SharePoint]简单实现Treeview Navigation        
protected const string ImagesFolder = "wpresources/images/";
[SharePoint]简单实现Treeview Navigation        
private bool _isExpanded = true;
[SharePoint]简单实现Treeview Navigation        
private string _expandLevel;
[SharePoint]简单实现Treeview Navigation        
private Microsoft.SharePoint.SPWeb _spweb;
[SharePoint]简单实现Treeview Navigation        

[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        [System.ComponentModel.Browsable(
true),
[SharePoint]简单实现Treeview Navigation        System.ComponentModel.Description(
"展开深度")]
[SharePoint]简单实现Treeview Navigation        
public string ExpandLevel
{

 
[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        [System.ComponentModel.Browsable(
true),
[SharePoint]简单实现Treeview Navigation        System.ComponentModel.Description(
"默认展开")]
[SharePoint]简单实现Treeview Navigation        
public bool IsExpanded 
{

 
[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        
public Microsoft.SharePoint.SPWeb SPWeb
{
[SharePoint]简单实现Treeview Navigation            
get
{
[SharePoint]简单实现Treeview Navigation                
return _spweb;
[SharePoint]简单实现Treeview Navigation            }

[SharePoint]简单实现Treeview Navigation            
set
{
[SharePoint]简单实现Treeview Navigation                _spweb 
= value;
[SharePoint]简单实现Treeview Navigation            }

[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation        
#endregion
[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        
private void Page_Load(object sender, System.EventArgs e)
{
[SharePoint]简单实现Treeview Navigation            
try
{
[SharePoint]简单实现Treeview Navigation                
if(ExpandLevel != null)
{
[SharePoint]简单实现Treeview Navigation                    AreaList.ExpandLevel 
= int.Parse(ExpandLevel);//TreeView的展开深度
[SharePoint]简单实现Treeview Navigation
                }
[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation                
if(AreaList.Nodes.Count>0)
{
[SharePoint]简单实现Treeview Navigation                    AreaList.Nodes.Clear();
//清除已有节点
[SharePoint]简单实现Treeview Navigation
                }
[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation                SPWeb spweb 
= null;
[SharePoint]简单实现Treeview Navigation                SPWebCollection subWebs 
= null;
[SharePoint]简单实现Treeview Navigation            
[SharePoint]简单实现Treeview Navigation                TreeNode node 
= new TreeNode();//定义根节点
[SharePoint]简单实现Treeview Navigation
                spweb = SPControl.GetContextWeb(Context);//获取当前Web站点
[SharePoint]简单实现Treeview Navigation
                subWebs = spweb.GetSubwebsForCurrentUser();//获取当前站点下的所有子站点
[SharePoint]简单实现Treeview Navigation
                if(this.SPWeb.ID == spweb.ID)
{
[SharePoint]简单实现Treeview Navigation                    node.Text 
= "<b>"+spweb.Title+"</b>";//当前站点粗体显示
[SharePoint]简单实现Treeview Navigation
                }
[SharePoint]简单实现Treeview Navigation                
else
{
[SharePoint]简单实现Treeview Navigation                    node.Text 
= spweb.Title;
[SharePoint]简单实现Treeview Navigation                }

[SharePoint]简单实现Treeview Navigation                node.Expanded 
= this.IsExpanded;//是否展开根节点
[SharePoint]简单实现Treeview Navigation
                node.NavigateUrl = spweb.Url;
[SharePoint]简单实现Treeview Navigation                AreaList.Nodes.Add(node);
[SharePoint]简单实现Treeview Navigation                AddTreeNode(spweb,AreaList.Nodes[
0]);//调用递归函数生成所有子节点
[SharePoint]简单实现Treeview Navigation
            }
[SharePoint]简单实现Treeview Navigation            
catch(Exception ex)
{
[SharePoint]简单实现Treeview Navigation                ErrorMessage.Text 
= ex.Message;
[SharePoint]简单实现Treeview Navigation            }

[SharePoint]简单实现Treeview Navigation            
[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        
private void AddTreeNode(SPWeb currentWeb, TreeNode parentNode)
{
[SharePoint]简单实现Treeview Navigation            
[SharePoint]简单实现Treeview Navigation            
foreach(SPWeb web in currentWeb.GetSubwebsForCurrentUser())
{
[SharePoint]简单实现Treeview Navigation                TreeNode node 
= new TreeNode();
[SharePoint]简单实现Treeview Navigation                
if(this.SPWeb.ID == web.ID)
{
[SharePoint]简单实现Treeview Navigation                    node.Text 
= "<b>"+web.Title+"</b>";
[SharePoint]简单实现Treeview Navigation                }

[SharePoint]简单实现Treeview Navigation                
else
{
[SharePoint]简单实现Treeview Navigation                    node.Text 
= web.Title;
[SharePoint]简单实现Treeview Navigation                }

[SharePoint]简单实现Treeview Navigation                node.NavigateUrl 
= web.Url;
[SharePoint]简单实现Treeview Navigation                parentNode.Nodes.Add(node);            
[SharePoint]简单实现Treeview Navigation                AddTreeNode(web,node);
[SharePoint]简单实现Treeview Navigation            }

[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation

[SharePoint]简单实现Treeview Navigation        
override protected void OnInit(EventArgs e)
{
[SharePoint]简单实现Treeview Navigation            
//
[SharePoint]简单实现Treeview Navigation            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
[SharePoint]简单实现Treeview Navigation            
//
[SharePoint]简单实现Treeview Navigation
            InitializeComponent();
[SharePoint]简单实现Treeview Navigation            
base.OnInit(e);
[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation        

[SharePoint]简单实现Treeview Navigation        
///        设计器支持所需的方法 - 不要使用代码编辑器
[SharePoint]简单实现Treeview Navigation        
///        修改此方法的内容。
[SharePoint]简单实现Treeview Navigation        
/// </summary>
[SharePoint]简单实现Treeview Navigation        private void InitializeComponent()
{
[SharePoint]简单实现Treeview Navigation            
this.Load += new System.EventHandler(this.Page_Load);
[SharePoint]简单实现Treeview Navigation
[SharePoint]简单实现Treeview Navigation        }

[SharePoint]简单实现Treeview Navigation        
#endregion
[SharePoint]简单实现Treeview Navigation    }

源代码下载地址:https://files.cnblogs.com/dudu/AreaTreeView.rar
部置方法:
1、下载并安装iewebcontrols:https://files.cnblogs.com/dudu/iewebcontrols.rar
2、如果没有安装SmartPart 1.0, 请下载并安装:http://www.gotdotnet.com/workspaces/workspace.aspx?id=6cfaabc8-db4d-41c3-8a88-3f974a7d0abe
3、排除管理路径webctrl_client,该目录是在安装iewebcontrols时生成的,如果不排除的话,就无法显示TreeView(经过kaneboy的指点, 我才知道这个的, 感谢kaneboy),操作方法:在Windows SharePoint Services 管理中心=》配置虚拟服务器设置=》选择你的虚拟服务器=》定义管理路径中添加新路径webctrl_client(排除的路径)。
4、将DUDU.AreaTreeView.dll复制到SharePoint站点的bin目录中(如果没有该目录,就手工创建)。
5、将AreaTreeView.ascx复制到SharePoint站点的UserControls目录中(如果没有该目录,就手工创建)。

我觉得Treeview Navigation如果只显示站点与子站点的结构,并不是很实用,我们更需要显示区域的结构,这样才能全面显示站点的导航结构,使用起来才更方便,所以我想开发一个显示区域结构的AreaTreeView。


相关文章: