自定义控件中集合属性在智能标签中的问题。。。。
//这是控件的代码
[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的智能面板上,他是一个编辑列。。按钮 应该是用的是一个方法来弹出集合编辑器。但是我不知道在事件中写弹出集合属性的编辑器。。 希望大家帮忙啊 很急啊~~~~~ 谢谢啦 ·········分可以在加··