今天笔者向大家介绍如何实现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看到如上图显示的效果,到此为止,笔者关于quickpart一系列的简单应用都介绍完了