* 作者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中建立相应属性来保存此值,如下:



















要注意的一点就是这个属性是隐藏的,因为我们不需要自带的WebPart显示出来,所以将Browsable设置成false。
然后我们就需要在ToolPart中画出我们需要的文本框了。画出这个ToolPart的方法大家都很熟悉了,就是RenderToolPart代码如下:













在这段代码中,ToolPane tp = this.ParentToolPane是得到ToolPart所在的ToolPane,然后通过ToolPane.SelectedWebPart得到当前的WebPart,然后通过WebPart.Text得到我们的那个隐藏值,这个隐藏值就是文本框的初始值。这个inputname的变量是做为文本框的name。是在这个ToolPart类中声明的,如下:
string inputname = null;
然后通过构造函数捕捉初始化事件:










在初始化函数中设置inputname的值,这个值只要是一个唯一的就可以了,所以借助了UniqueID。
这是呈现,那么如何在用户填写了以后保存起来这个值呢?也即保存到我们WebPart中那个隐藏的Text属性中。这就要通过ToolPart类中的ApplyChanges()方法,这是点击了确定确认了修改的时候执行的方法。代码如下:










通过这段代码我们可以看到,采用Page.Request.Form[inputname]得到输入在文本框中的值,然后赋值给隐藏域。
这种自定义属性有什么好处呢?在于你可以控制ToolPart的输出,比如你可以做一些特殊的控件让用户方便的输入属性等。或者你可以更改文本框的背景色或者前景色,也即你自己控制的力度加大了。
欢迎访问海洋工作室( http://sps.oceanstudio.net )