SideBar的定制

今天笔者向大家介绍如何实现SideBar的定制,这部分可让笔者吃了不少苦头,走了不少弯路,我相信介绍完这部分内容后,大家就能够发挥各自的想象力开发出丰富而又实用的SideBar,先解释下什么叫SideBar,顾名思义,翻译成中文就是边栏”,每当我们编辑页面上的WebPart,页面的右边会弹出一个属性设置工具栏,这就是SideBar,下面笔者通过一个Demo给大家演示,当然这个Demo是基于上几篇的内容,如果您还不了解前面几部分内容的话,建议您先阅读下之前的文章

SideBar的定制

在原有的项目基础上添加一个类,取名为”MySideBar.cs”

SideBar的定制

下面的编程中需要使用到QuickPart程序集下的类,所以必须添加对QuickPart.dll的引用,有的朋友可能会问QuickPart.dll的所在位置,笔者告诉您,如果您使用的是1.0版本QuickPart,那么部署完后会在”C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin”目录下生成该程序集,如果您使用的是1.0.3版本则会部署至GAC(Global Application Cache)目录下,路径通常为”C:\Windows\assembly\” 

MySideBar.cs代码如下:

using Microsoft.SharePoint;

using Microsoft.PRC.SharePoint;

 

namespace BindDocLibrary_APP

{

    //继承EditorPart类

    public class MySideBar:EditorPart

    {

        DropDownList ddlDocLibNameList;

        //EditorPart类的抽象方法,当点下SideBar上的"应用"按钮时触发

        public override bool ApplyChanges()

        {

            //判断服务器控件是否包含子控件,若不包含,则创建子控件

            EnsureChildControls();

            //获取当前正在编辑的webpart控件,将其转换成QuickPart类型

            QuickPart quickPart = WebPartToEdit as QuickPart;

            //获取该quickPart里面包含的控件

            Control currentControl = quickPart.Controls[0];

            //TreeCatalog类为笔者上几篇所建的树行目录

            TreeCatalog trCatalog = currentControl as TreeCatalog;

            //当点击"应用"按钮时,将SideBar上的设置赋给trCatalog类下的文档库属性

            trCatalog.DocLibName = ddlDocLibNameList.SelectedValue;

            return true;

        }

        //EditorPart类的抽象方法,当您点下"修改共享web部件"按钮时触发

        public override void SyncChanges()

        {

            EnsureChildControls();

            QuickPart quickPart = WebPartToEdit as QuickPart;

            Control currentControl = quickPart.Controls[0];

            TreeCatalog trCatalog = currentControl as TreeCatalog;

            //此时是将您webpart上的属性值回调并显示到sidebar对应栏中的过程

            ddlDocLibNameList.SelectedValue = trCatalog.DocLibName;

        }

        //重写该方法的目的是将我们想要的内容输出到SideBar面板上

        public override void RenderControl(HtmlTextWriter writer)

        {

            writer.Write("请选择文档库");

            //将服务器控件内容输出到SideBar面板,这里会输出笔者一开始定义的列表框"ddlDocLibNameList"

            base.RenderControl(writer);

        }

        //重写创建子控件方法

        protected override void CreateChildControls()

        {

            ddlDocLibNameList = new DropDownList();

            //获得当前http请求的web页面

            SPWeb spWeb = SPContext.Current.Web;

            //遍历该页面的所有列表,记住,文档库是一种特殊的列表

            foreach (SPList spList in spWeb.Lists)

            {

                //将所有的列表名称添加到下拉列表框控件中

                ddlDocLibNameList.Items.Add(new ListItem(spList.Title));

            }

            //最后要记得添加该控件到页面上,切忌在写成Page.Controls.Add(ddlDocLibNameList)

            Controls.Add(ddlDocLibNameList);

            base.CreateChildControls();

        }

    }

}

 

   TreeCatalog.ascx.cs文件在笔者原有代码上添加如下代码:  

   首先修改TreeCatalog继承IWebEditable:

public partial class TreeCatalog : System.Web.UI.UserControl,IWebEditable

实现IWebEditable类的所有方法如下

#region IWebEditable 成员

        public EditorPartCollection CreateEditorParts()

        {

            MySideBar mySideBar = new MySideBar();

            mySideBar.Title = "文档库列表";

            mySideBar.ID = this.ID + "_SideBar";                      

         

            ArrayList arrList = new ArrayList();

            arrList.Add(mySideBar);

 

            return new EditorPartCollection(arrList);

        }

 

        public object WebBrowsableObject

        {

            get { return this; }

        }

#endregion

这段代码大家都看得懂,笔者就不注释了,我们来看下最后的效果

SideBar的定制

依次选择网站操作”->”编辑页面”,在左栏区域依次选择编辑”->”修改共享web部件”,就可以在页面右边的sidebar看到如上图显示的效果,到此为止,笔者关于quickpart一系列的简单应用都介绍完了

你可能感兴趣的:(ide)