今天笔者向大家介绍如何实现SideBar的定制,这部分可让笔者吃了不少苦头,走了不少弯路,我相信介绍完这部分内容后,大家就能够发挥各自的想象力开发出丰富而又实用的SideBar了,先解释下什么叫SideBar,顾名思义,翻译成中文就是”边栏”,每当我们编辑页面的WebPart时,页面的右边会弹出一个属性设置工具栏,这就是SideBar,下面笔者通过一个Demo给大家演示,当然这个Demo是基于上几篇的内容,如果您还不了解前面几部分内容的话,建议您先阅读下之前的文章
在原有的项目基础上添加一个类,取名为”MySideBar.cs”
下面的编程中需要使用到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
这段代码大家都看得懂,笔者就不注释了,我们来看下最后的效果
依次选择”网站操作”->”编辑页面”,在左栏区域依次选择”编辑”->”修改共享web部件”,就可以在页面右边的sidebar看到如上图显示的效果
