none
如何在自定义控件里 创建类似 gridview 里的columns 属性的属性 RRS feed

  • 问题

  • columns  是个集合 通过 添加[PersistenceMode(PersistenceMode.InnerProperty)]
    可以在控件标签内设置值

    我在自定义控件里想 设置一个 集合属性 通过页面设置值(比如Collection<string>或Collection<uerControl>) ) 该怎么做

     

     

            [DefaultValue("")]
            [Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
            [MergableProperty(false)]
            [PersistenceMode(PersistenceMode.InnerProperty)]
            public virtual DataControlFieldCollection Columns { get; }
    
    



    如这样的形式

    <uc1:tag id="" runt="">
    
       <collectionAttribute>
    
           <uc2:tag id="" runt="">
    
           <uc2:tag id="" runt="">
    
       </collectionAttribute>
    
    </c1:tag>
    
    


     







    • 已编辑 e.e.e 2011年12月21日 3:04
    2011年12月21日 2:03

答案

  • columns  是个集合 通过 添加[PersistenceMode(PersistenceMode.InnerProperty)]
    可以在控件标签内设置值

    我在自定义控件里想 设置一个 集合属性 通过页面设置值(比如Collection<string>或Collection<uerControl>) ) 该怎么做

     

     

            [DefaultValue("")]
            [Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
            [MergableProperty(false)]
            [PersistenceMode(PersistenceMode.InnerProperty)]
            public virtual DataControlFieldCollection Columns { get; }
    
    
    



    如这样的形式

    <uc1:tag id="" runt="">
    
       <collectionAttribute>
    
           <uc2:tag id="" runt="">
    
           <uc2:tag id="" runt="">
    
       </collectionAttribute>
    
    </c1:tag>
    

     


    自定义控件中的集合,参考:http://msdn.microsoft.com/zh-cn/dd567281.aspx

    [ToolboxData("<{0}:ControlBuilderControl runat=server></{0}:ControlBuilder Control>")]
    [ParseChildren(true, "ScriptItems")]
    [ControlBuilder(typeof(ScriptItemBuilder))]
    public class ControlBuilderControl : WebControl
    {
        private ScriptItemCollection _ScriptItems = new ScriptItemCollection();
        /// <summary>
      /// 脚本命令集合属性
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerProperty)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Description("工具按钮集设置")]
        [Category("工具按钮——属性设置")]
        public ScriptItemCollection ScriptItems
        {
            get
            {
                if (_ScriptItems == null)
                {
                    _ScriptItems = new ScriptItemCollection();
                }
                return _ScriptItems;
            }
        }
        //… … 
    }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    • 已编辑 ThankfulHeart 2011年12月21日 5:20
    • 已标记为答案 e.e.e 2011年12月23日 8:33
    2011年12月21日 5:11

全部回复

  • columns  是个集合 通过 添加[PersistenceMode(PersistenceMode.InnerProperty)]
    可以在控件标签内设置值

    我在自定义控件里想 设置一个 集合属性 通过页面设置值(比如Collection<string>或Collection<uerControl>) ) 该怎么做

     

     

            [DefaultValue("")]
            [Editor("System.Web.UI.Design.WebControls.DataControlFieldTypeEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
            [MergableProperty(false)]
            [PersistenceMode(PersistenceMode.InnerProperty)]
            public virtual DataControlFieldCollection Columns { get; }
    
    
    



    如这样的形式

    <uc1:tag id="" runt="">
    
       <collectionAttribute>
    
           <uc2:tag id="" runt="">
    
           <uc2:tag id="" runt="">
    
       </collectionAttribute>
    
    </c1:tag>
    

     


    自定义控件中的集合,参考:http://msdn.microsoft.com/zh-cn/dd567281.aspx

    [ToolboxData("<{0}:ControlBuilderControl runat=server></{0}:ControlBuilder Control>")]
    [ParseChildren(true, "ScriptItems")]
    [ControlBuilder(typeof(ScriptItemBuilder))]
    public class ControlBuilderControl : WebControl
    {
        private ScriptItemCollection _ScriptItems = new ScriptItemCollection();
        /// <summary>
      /// 脚本命令集合属性
        /// </summary>
        [PersistenceMode(PersistenceMode.InnerProperty)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Description("工具按钮集设置")]
        [Category("工具按钮——属性设置")]
        public ScriptItemCollection ScriptItems
        {
            get
            {
                if (_ScriptItems == null)
                {
                    _ScriptItems = new ScriptItemCollection();
                }
                return _ScriptItems;
            }
        }
        //… … 
    }


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    • 已编辑 ThankfulHeart 2011年12月21日 5:20
    • 已标记为答案 e.e.e 2011年12月23日 8:33
    2011年12月21日 5:11
  • 我定义了 在 控件里一个datetime属性

      [PersistenceMode(PersistenceMode.InnerProperty)]
        [TypeConverter(typeof(DateTimeConverter))]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public DateTime LastMod
        {
            get;
            set;
        }
    


    页面 引用控件

    <uc1:Url ID="Url1" runat="server">
          <LastMod>2011-12-12</LastMod>
    </uc1:Url>
    

    得到错误

    分析器错误

    说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

    分析器错误消息: “System.DateTime”内不允许包含文字内容(“2011-12-12”)。

    源错误:

    行 11:     <div>
    行 12:         <uc1:Url ID="Url1" runat="server">
    行 13:            <LastMod>2011-12-12</LastMod>
    行 14:         </uc1:Url>
    行 15:     </div>

     

    除了字符串 类型的  比如 日期 枚举应该怎么做

     

    2011年12月23日 8:46
  • 我定义了 在 控件里一个datetime属性

      [PersistenceMode(PersistenceMode.InnerProperty)]
        [TypeConverter(typeof(DateTimeConverter))]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public DateTime LastMod
        {
            get;
            set;
        }
    


    页面 引用控件

    <uc1:Url ID="Url1" runat="server">
          <LastMod>2011-12-12</LastMod>
    </uc1:Url>
    

    得到错误

    分析器错误

    说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。

    分析器错误消息: “System.DateTime”内不允许包含文字内容(“2011-12-12”)。

    源错误:

    行 11:     <div>
    行 12:         <uc1:Url ID="Url1" runat="server">
    行 13:            <LastMod>2011-12-12</LastMod>
    行 14:         </uc1:Url>
    行 15:     </div>

    除了字符串 类型的  比如 日期 枚举应该怎么做


    尝试改成2011/12/12(把“-”改成"/")。

    我简单模拟你的情况,默认是“/”——


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月23日 8:56
  • 改了也不行

    我在编辑器里 属性窗口 输入值的时候 没有日历界面

    是不是我少写哪个特性??

     

    2011年12月23日 9:29
  • 改了也不行

    我在编辑器里 属性窗口 输入值的时候 没有日历界面

    是不是我少写哪个特性??

     


    没有少,我就是直接复制你的代码的——

    public class MyControl:WebControl
    {
       [PersistenceMode(PersistenceMode.InnerProperty)]
        [TypeConverter(typeof(DateTimeConverter))]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public DateTime LastMod
        {
            get;
            set;
        }
    }

    然后重新编译整个project,生成的控件拖拽到页面,选中后属性框就会有我截图的下拉选择的DateTimePicker类似的东西了。


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    2011年12月24日 3:33