自定义控件中集合属性在智能标签中的问题。。。。

zhaoding434 2012-03-16 09:41:02
 //这是控件的代码
  [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的智能面板上,他是一个编辑列。。按钮 应该是用的是一个方法来弹出集合编辑器。但是我不知道在事件中写弹出集合属性的编辑器。。 希望大家帮忙啊 很急啊~~~~~ 谢谢啦 ·········分可以在加··
...全文
113 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoding434 2012-03-16
  • 打赏
  • 举报
回复




顶······

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧