//这是控件的代码
  [DefaultProperty("Columns")]
    [ParseChildren(true, "Columns")]
    [ToolboxData("<{0}:dGrid runat=server></{0}:dGrid>")]
    [Designer(typeof(dGrid_Designer))]
    [DesignerAttribute(typeof(dGrid_Designer))]
    public class dGrid :WebControl, INamingContainer    {
        //创建列的集合属性
        private List<Column> _Columns;
        [Bindable(true)]
        [PersistenceMode(PersistenceMode.InnerProperty)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        //[Editor(typeof(columnEditer), typeof(UITypeEditor))]//columnEditer设计器
        [Description("列的配置")]
        [Category("dGrid配置")]
        public List<Column> Columns
        {
            get
            {
                if (_Columns == null)
                    _Columns = new List<Column>();
                return _Columns;
            }
            set
            {
                _Columns = value;
            }
        }
     
      // ....其他的省略
   }  // 设计时支持类 
  public class dGrid_Designer : ControlDesigner
    {
        //设计时htm输出
        public override string GetDesignTimeHtml()
        {  
           //.....略         
         }
  
         //创建一个自定义操作列表集合
        public override DesignerActionListCollection ActionLists
        {
            get
            {
                DesignerActionListCollection actionLists = new DesignerActionListCollection();
                actionLists.Add(new CustomControlActionList(this));                return actionLists;
            }
        }  
   }  // 智能标签
     internal class CustomControlActionList : DesignerActionList
    {
        private dGrid_Designer _parent;
        private DesignerActionItemCollection items;        public CustomControlActionList(dGrid_Designer parent)
            : base(parent.Component)
        {
            _parent = parent;
        }        // 集合属性
         public List<Column> Columns
        {
            get
            {
                dGrid ctrl = (dGrid)_parent.Component;
                return ctrl.Columns;
            }
            set
            {
                PropertyDescriptor propDesc = TypeDescriptor.GetProperties(_parent.Component)["Columns"];
                propDesc.SetValue(_parent.Component, value);  
            }
        }
         //只能标记的项
         public override DesignerActionItemCollection GetSortedActionItems()
        {
            if (items == null)
            {
                items.Add(new DesignerActionPropertyItem("Columns","配置列"));
             }            
            return items;
         }
     }
//Column类
public class Column
    {
        private string _id;
        private string _text;
        private bool _visable = true;
        public Column()
        {
        }
        public Column(string id, string text, bool visible)
        {
            _id = id;
            _text = text;
            _visable = visible;
        
        }        [Description("对应的数据库字段")]
        [NotifyParentProperty(true)]
        public string Field
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
            }
        }
        [Description("对应表头显示的文字")]
        [NotifyParentProperty(true)]
        public string Text
        {
            get
            {
                return _text;
            }
            set
            {
                _text = value;
            }
        }        [Description("该列是否可见")]
        [NotifyParentProperty(true)]
        public bool Visable
        {
            get
            {
                return _visable;
            }
            set
            {
                _visable = value;
            }
        }
    }  目前在设计试图的时候控件右边有个小三角形 按了会弹出智能标签面板。 里面有一个我添加的东西,集合属性也在,样子跟属性栏里的差不多,而且点那个省略号的按钮能弹出集合属性编辑器,能看到当前的集合属性,但是增加,修改,删除都无效,浏览界面也没有更新(这时如果更改一下别的属性什么的,,刚才列的更改就显示出来了。),这个问题在属性栏里的配置这个集合属性时不会发生。属性栏里更改集合属性都即使显示的。 不知道是什么问题。困扰很久了我想到gridview的智能面板上,他是一个编辑列。。按钮 应该是用的是一个方法来弹出集合编辑器。但是我不知道在事件中写弹出集合属性的编辑器。。       希望大家帮忙啊  很急啊~~~~~ 谢谢啦 ·········分可以在加··