请教一个自定义控件的Items属性的问题

heshengjie 2008-01-24 09:50:41
请假各位,我开发了一个自定义控件,这个控件有一个属性Items,和DropDownList的Items属性是一样的,但是我可能缺少类型转换器的声明,致使出现这样的错误:
无法从其“Items”属性的字符串表示形式“(Collection)”创建“System.Web.UI.WebControls.ListItemCollection”类型的对象。
以下是我的代码:
[Bindable(true)]
[PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)]
[Editor("System.Web.UI.Design.WebControls.ListItemsCollectionEditor,System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
[MergableProperty(false)]
[DefaultValue("")]
[TypeConverter(typeof(CollectionConverter))]
public ListItemCollection Items
{
get
{
ListItemCollection s = (ListItemCollection)ViewState["Items"];
return s;
}

set
{
ViewState["Items"] = value;
}
}
看了一些帖子和网上资料,是说属性的信息都保存为字符串,这些属性都要从字符串转化而来。那么也就是说需要一个ListItemCollection的转换器。我看了帮助文件(惭愧,太多了,实在看不懂啊),用了上述声明的CollectionConverter,不幸的是,不管用。

请假各位方家,应该使用什么现成的转换器呢?我想既然微软已经提供了DropDownList的Items属性,那么转换器也应该做好了的,我利用他的就行了,只是不知道到底是哪个?
另外是否因为我的代码问题呢?

谢谢大家!
...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
heshengjie 2008-01-25
  • 打赏
  • 举报
回复
saucer所贴的代码似乎是某个ListControl子控件的代码,在2005上编译也有不通过的,并不可用啊。

不过saucer说使用reflector来查看ListItemCollection的代码值得尝试。

希望有经验的朋友给我明确一下。
heshengjie 2008-01-25
  • 打赏
  • 举报
回复
问题解决了,我看了saucer回答别人的帖子,抄了一下试用,好了!我也不知道其中的奥妙,惭愧啊。我这里也把代码贴一下给更多人共享!
public ListItemCollection _items=new ListItemCollection();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
NotifyParentProperty(true),
PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public ListItemCollection Items
{
get
{
return _items;
}
}
heshengjie 2008-01-25
  • 打赏
  • 举报
回复
反射得来的代码和saucer所贴的代码一致。看来通过反射也无法解决。
有经验的朋友过来说一下啊。
heshengjie 2008-01-24
  • 打赏
  • 举报
回复
请求大家帮助我!
saucer 2008-01-24
  • 打赏
  • 举报
回复
建议你通过reflector看一下ListControl的Items是怎么实现的


private ListItemCollection items;

[PersistenceMode(PersistenceMode.InnerDefaultProperty), Editor("System.Web.UI.Design.WebControls.ListItemsCollectionEditor,System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), MergableProperty(false), WebSysDescription("ListControl_Items"), WebCategory("Default"), DefaultValue((string) null)]
public virtual ListItemCollection Items
{
get
{
if (this.items == null)
{
this.items = new ListItemCollection();
if (base.IsTrackingViewState)
{
this.items.TrackViewState();
}
}
return this.items;
}
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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