创建一个带有自定义属性并且能在属性栏自由修改所定义属性的Webpart,也就是创建带 Custom Tool Part的Web Part
效果如下
要达到这样的效果,要做的无非就是一下两件事
一.在你的project里增加一个CustomToolPart类并继承
Microsoft.SharePoint.WebPartPages.ToolPart类
例如:
这个类里所要描述的东西就是你想在属性编辑页面内呈现的东西,也就是说这个类里写的东西会出现在你的Custom Tool Part里面。
然后再在 //Add your code here部分开始添加代码吧
在这里,有一个必须要重载的类方法:ApplyChanges,他能够把你在属性编辑页面所作的修改传递给webpart,可以理解为【应用】跟【确定】两颗键的CLICK事件。
public override void ApplyChanges()
{
//这里我定义一个类型为WebPart的变量,并给已经在WebPart里定义好的
//自定义变量searchUrl赋值
SiteQuotaView cw1 =
(SiteQuotaView)this.ParentToolPane.SelectedWebPart;
cw1.searchUrl.Add(“OUTURL”);
}
下面把ToolPart里常用的事件列一下
//将Tool Part控件的值保存到关联 WebPart 控件的相应属性。
public override void ApplyChanges()
{}
//从 WebPart 控件检索属性值并将这些属性值分配给关联的 Tool Part控件
public override void SyncChanges()
{}
//可以理解为Cancel键的click事件
public override void CancelChanges()
{}
//Tool Part内的控件呈现
protected override void RenderToolPart(HtmlTextWriter output)
{}
另外,可以重载WebPart所拥有的各种方法,比如OnPreRender、CreateChildControls等等,webpart的方法先执行,再执行ToolPart里相同方法内的代码。
二. 在Web Part class中重载GetToolParts方法
例如:
public override ToolPart[] GetToolParts()
{
ToolPart[] toolparts = new ToolPart[3];
WebPartToolPart wptp = new WebPartToolPart();
CustomPropertyToolPart custom = new CustomPropertyToolPart();
toolparts[0] = custom;
toolparts[1] = wptp;
// 我制作的TOOLPART名字是CustomToolPart
toolparts[2] = new CustomToolPart();
return toolparts;
}
以下是对于这个方法的解释(引用自Rickie Lee's blog)
在Web Part class中重载WebPart基类的GetToolParts方法,GetToolParts方法返回引用新ToolPart对象的数组,新ToolPart对象将以在数组中的顺序显示在Web Part的属性面板中。如果Web Part需要,你可以显示多个ToolParts。需要注意的是,当你重载WebPart类的GetToolParts方法时,缺省的ToolPart对象(WebPartToolPart和CustomPropertyToolPart)不能自动显示,因此你必须包含显示它们的代码。
缺省情况下,GetToolParts方法将返回CustomPropertyToolPart和WebPartToolPart对象。CustomPropertyToolPart对象将显示内置的tool part,这些tool part用来显示定制属性(custom properties)。如果你想通过使用内置的tool part来显示一些web part的定制属性,你必须在GetToolParts方法的返回数组包含对CustomPropertyToolPart对象的引用。WebPartToolPart对象将显示Web Part所有基类属性。在Web Part开发人员重载该方法后,他不得不明确显示这些缺省tool parts。
一般情况下,制作此类WebPart都要定义一个自定义属性以用来存储必要的信息
例如:
public class SiteQuotaView : Microsoft.SharePoint.WebPartPages.WebPart
{
private List<string> _searchUrl = new List<string>();
[Personalizable(PersonalizationScope.Shared),
WebBrowsable(false),
WebDisplayName("StringList"),
WebDescription("The URL what's in Search")]
public List<string> searchUrl
{
get { return _searchUrl; }
set { _searchUrl = value; }
}
//Here is the other code
}
自定义属性可以让非开发人员,比如站点管理员或者最终用户,在Web页面上直接修改Web Part所对应的类的某个属性值,而无需开发人员重新在Visual Studio 2005中修改代码,然后重新编译,重新部署。
各个Attribute修饰的解释如下
WebBrowsable:定义是否可以在网页上的属性设定里被看到
用法示范:[WebBrowsable(false) ],[WebBrowsable ]
Personalizable:定义是否可以在使用者编辑个人网页时进行个性化设定
[Personalizable(PersonalizationScope.Shared) ]
[Personalizable(true) ]
[Personalizable ]
WebDisplayName:定义出现在属性定义上的标题
WebDescription:定义出现在属性定义上的描述
参考:
http://msdn.microsoft.com/en-us/library/ms948930.aspx