在自定义ToolPart上自定义属性

***********************************************************************
*                              版权声明
*      此文章为ocean所有,版权归ocean所有,任何网
* 站和 媒体转载必须包含此段声明,否则将视为侵权,作
* 者将保留一切权力。此声明为此文章中不可或缺的一部分。
* 作者网名:ocean
* 作者email:ocean@forever.net.cn
* 作者网站:http://www.oceanstudio.net
*                http://sps.oceanstudio.net
* 作者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中建立相应属性来保存此值,如下:

    

//这个属性是隐藏的,主要用于接收自定义的ToolPart中的自定义属性的值
        [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代码如下:


/// <summary>
        
/// 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;

    然后通过构造函数捕捉初始化事件:


public CustPropsToolPart()
        
{
            
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()方法,这是点击了确定确认了修改的时候执行的方法。代码如下:

    

public override void 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
 

posted on 2005-03-04 08:54  ocean  阅读(6989)  评论(2编辑  收藏  举报

导航