* 作者blog:博客园,http://www.cnblogs.com/ocean
* Ocean's blog,http://www.oceanstudio.net/sps/blog
* 此文章发表时间:2005年3月4日
如何能够在WebPart中自定义的ToolPart中添加自定义的属性呢?达到下图的效果:
我还专门作了一个示例,代码可以点击此处下载。
同时可以点击此处查看此WebPart的演示效果,但是可惜因为匿名用户不能修改WebPart属性,所以你看不到这个ToolPane。你看到的呈现如下:
同时你可以从 http://www.oceanstudio.net/sps/Lists/webpart/AllItems.aspx 查看其它的WebPart。
如何自定义ToolPart轻参考以前我写的一篇Blog 《创建一个自定义ToolPart》
我们在自定义的ToolPart中定义了一个文本框的字符串属性。
首先我们知道,属性都是保存在WebPart中,所以我们需要在WebPart中建立相应属性来保存此值,如下:
[Browsable(false),
Category("Miscellaneous"),
DefaultValue(defaultText),
WebPartStorage(Storage.Personal),
FriendlyName("Text"),
Description("Text Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
要注意的一点就是这个属性是隐藏的,因为我们不需要自带的WebPart显示出来,所以将Browsable设置成false。
然后我们就需要在ToolPart中画出我们需要的文本框了。画出这个ToolPart的方法大家都很熟悉了,就是RenderToolPart代码如下:
/// Render this tool part to the output parameter specified.
/// </summary>
/// <param name="output">The HTML writer to write out to </param>
protected override void RenderToolPart(HtmlTextWriter output)
{
ToolPane tp = this.ParentToolPane;
CustomProps myWP = (CustomProps)tp.SelectedWebPart;
output.Write("请输入信息:<input name=\""
+ inputname + "\" type=\"text\" value=\"" + myWP.Text
+ "\"><BR>");
}
在这段代码中,ToolPane tp = this.ParentToolPane是得到ToolPart所在的ToolPane,然后通过ToolPane.SelectedWebPart得到当前的WebPart,然后通过WebPart.Text得到我们的那个隐藏值,这个隐藏值就是文本框的初始值。这个inputname的变量是做为文本框的name。是在这个ToolPart类中声明的,如下:
string inputname = null;
然后通过构造函数捕捉初始化事件:
{
this.Title = "自定义属性的ToolPart";
this.Init += new EventHandler(CustPropsToolPart_Init);
}
private void CustPropsToolPart_Init(object sender, EventArgs e)
{
//设置定义义属性的文本框的name
this.inputname = this.UniqueID + "msg";
}
在初始化函数中设置inputname的值,这个值只要是一个唯一的就可以了,所以借助了UniqueID。
这是呈现,那么如何在用户填写了以后保存起来这个值呢?也即保存到我们WebPart中那个隐藏的Text属性中。这就要通过ToolPart类中的ApplyChanges()方法,这是点击了确定确认了修改的时候执行的方法。代码如下:
{
// Apply property values here.
//得到WebPart对象
ToolPane tp = this.ParentToolPane;
CustomProps myWP = (CustomProps)tp.SelectedWebPart;
//将我们自定义的值传回到WebPart的Text属性中。
myWP.Text = Page.Request.Form[inputname];
}
通过这段代码我们可以看到,采用Page.Request.Form[inputname]得到输入在文本框中的值,然后赋值给隐藏域。
这种自定义属性有什么好处呢?在于你可以控制ToolPart的输出,比如你可以做一些特殊的控件让用户方便的输入属性等。或者你可以更改文本框的背景色或者前景色,也即你自己控制的力度加大了。
欢迎访问海洋工作室( http://sps.oceanstudio.net )