设为首页 收藏本站
查看: 906|回复: 0

[经验分享] [SharePoint]简单实现Treeview Navigation

[复制链接]
累计签到:6 天
连续签到:1 天
发表于 2015-9-25 12:10:51 | 显示全部楼层 |阅读模式
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,代码如下:


DSC0000.gif [System.ComponentModel.Description("AreaTreeView")]
    public class AreaTreeView : System.Web.UI.UserControl, SmartPart.IUserControl
DSC0001.gif DSC0002.gif     DSC0003.gif {
DSC0004.gif         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;
         
DSC0005.gif DSC0006.gif         "public properties"#region "public properties"

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

        [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[0]);//调用递归函数生成所有子节点
            }
            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
DSC0008.gif     }
源代码下载地址: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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118676-1-1.html 上篇帖子: SharePoint Portal Server之常见问题 下篇帖子: SharePoint 2013 图文开发系列之网站栏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表