• 在自定义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
     

  • 相关阅读:
    codeforces 765 F Souvenirs 线段树+set
    codeforces 768 E 变形NIM博弈/手写sg函数
    BZOJ 1001 狼抓兔子(网络流)
    BZOJ 2957 楼房重建 (分块)
    CodeForces
    CodeForces
    HYSBZ
    SPOJ
    Codeforces-963 D Frequency of String
    中石油2019寒假集训第一场(新生场)(补题)
  • 原文地址:https://www.cnblogs.com/ocean/p/112586.html
Copyright © 2020-2023  润新知