叼起烟头 发表于 2015-9-25 12:10:51

[SharePoint]简单实现Treeview Navigation

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,代码如下:



    public class AreaTreeView : System.Web.UI.UserControl, SmartPart.IUserControl
    {
      protected System.Web.UI.WebControls.Label ErrorMessage;
      protected Microsoft.Web.UI.WebControls.TreeView AreaList;
      protected const string ImagesFolder = "wpresources/images/";
      private bool _isExpanded = true;
      private string _expandLevel;
      private Microsoft.SharePoint.SPWeb _spweb;
         
      "public properties"#region "public properties"

      [System.ComponentModel.Browsable(true),
      System.ComponentModel.Description("展开深度")]
      public string ExpandLevel
      {
            get { return _expandLevel; }
            set { _expandLevel = value;}
      }

      [System.ComponentModel.Browsable(true),
      System.ComponentModel.Description("默认展开")]
      public bool IsExpanded
      {
            get { return _isExpanded; }
            set { _isExpanded = value; }
      }

      public Microsoft.SharePoint.SPWeb SPWeb
      {
            get
            {
                return _spweb;
            }
            set
            {
                _spweb = value;
            }
      }
      #endregion

      private void Page_Load(object sender, System.EventArgs e)
      {
            try
            {
                if(ExpandLevel != null)
                {
                  AreaList.ExpandLevel = int.Parse(ExpandLevel);//TreeView的展开深度
                }

                if(AreaList.Nodes.Count>0)
                {
                  AreaList.Nodes.Clear();//清除已有节点
                }

                SPWeb spweb = null;
                SPWebCollection subWebs = null;
            
                TreeNode node = new TreeNode();//定义根节点
                spweb = SPControl.GetContextWeb(Context);//获取当前Web站点
                subWebs = spweb.GetSubwebsForCurrentUser();//获取当前站点下的所有子站点
                if(this.SPWeb.ID == spweb.ID)
                {
                  node.Text = &quot;<b>&quot;+spweb.Title+&quot;</b>&quot;;//当前站点粗体显示
                }
                else
                {
                  node.Text = spweb.Title;
                }
                node.Expanded = this.IsExpanded;//是否展开根节点
                node.NavigateUrl = spweb.Url;
                AreaList.Nodes.Add(node);
                AddTreeNode(spweb,AreaList.Nodes);//调用递归函数生成所有子节点
            }
            catch(Exception ex)
            {
                ErrorMessage.Text = ex.Message;
            }
            
      }

      private void AddTreeNode(SPWeb currentWeb, TreeNode parentNode)
      {
            
            foreach(SPWeb web in currentWeb.GetSubwebsForCurrentUser())
            {
                TreeNode node = new TreeNode();
                if(this.SPWeb.ID == web.ID)
                {
                  node.Text = &quot;<b>&quot;+web.Title+&quot;</b>&quot;;
                }
                else
                {
                  node.Text = web.Title;
                }
                node.NavigateUrl = web.Url;
                parentNode.Nodes.Add(node);            
                AddTreeNode(web,node);
            }
      }

      Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
      override protected void OnInit(EventArgs e)
      {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
      }
         
      /**//// <summary>
      ///      设计器支持所需的方法 - 不要使用代码编辑器
      ///      修改此方法的内容。
      /// </summary>
      private void InitializeComponent()
      {
            this.Load += new System.EventHandler(this.Page_Load);

      }
      #endregion
    }
源代码下载地址:http://files.cnblogs.com/dudu/AreaTreeView.rar
部置方法:
1、下载并安装iewebcontrols:http://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。
页: [1]
查看完整版本: [SharePoint]简单实现Treeview Navigation