为ASP.NET组件加上Collection集合属性(C#)

** 为 ** ** ASP.NET ** ** 组件加上 ** ** Collection ** ** 集合属性 ** ** (C#) **

大家可能都用过 Asp.net 中的 DropDownList 控件,该控件有一个 Items 的集合属性,用于设置组合框的下拉选项。这种体贴的做法让用户倍感温馨,现在,我们也发挥一下自己的的才智,创建一个相同功能的属性。

我们将要创建的控件叫 WebPanel ,该控件用于网站导航,并且可以收缩,外观如下:

第一个图是未收缩的效果,第二个是收缩后的效果,虽然不炫,但是足可以说明问题了。

接下来再看一幅图:

这里,就是 Collection 属性的编辑器,今天我们就围绕这种效果展开话题。

在上面的 Collection 属性的编辑器中,主要分成两个部分,左边的部分是对象的集合,右边部分是选定对象的属性,我们可以对每个属性进行设置赋值。

首先,我们定义一个类: StringItem,该类有两个自定义属性:Text用于显示的文本,HyperText是导航的超链接。

using System;

using System.Web.UI;

namespace NSWebPanel

{

///

1<summary>
2
3///  StringItem 的摘要说明。 
4
5///  </summary>

///

public class StringItem : System.Web.UI.Control , IStateManager

{

private string _Text;

private string _HyperText;

public StringItem()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public string Text

{

set

{

_Text = value ;

}

get

{

return _Text;

}

}

public string HyperText

{

set

{

_HyperText = value ;

}

get

{

return _HyperText;

}

}

#region IStateManager 成员

void IStateManager.TrackViewState()

{

base .TrackViewState();

}

bool IStateManager.IsTrackingViewState

{

get

{

return base .IsTrackingViewState;

}

}

object IStateManager.SaveViewState()

{

return base .SaveViewState();

}

void IStateManager.LoadViewState( object state)

{

base .LoadViewState(state);

}

#endregion

}

}

然后,再创建一个用于存放多个 StringItem对象的类:StringItems, 需要注意的是:该类要继承CollectionBase,这样才能使用默认的Collection属性编辑器。

using System;

using System.Collections;

using System.Web.UI;

namespace NSWebPanel

{

///

1<summary>
2
3///  StringItems 的摘要说明。 
4
5///  </summary>

public class StringItems : CollectionBase , IStateManager

{

private bool marked;

public StringItems() : base ()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

private void Initialize()

{

marked = false ;

}

public StringItem this [ int index]

{

get

{

return (StringItem) base .List[index];

}

set

{

List[index] = value ;

}

}

public void Add(StringItem aItem)

{

base .List.Add(aItem);

}

public void Remove( int index)

{

if (index < base .Count - 1 && index > 0 )

{

base .List.RemoveAt(index);

}

}

#region IStateManager 成员

void IStateManager.TrackViewState()

{

for ( int i = 0 ; i < base .List.Count; i ++)

{

((IStateManager) base .List[i]).TrackViewState();

}

}

bool IStateManager.IsTrackingViewState

{

get

{

return marked;

}

}

object IStateManager.SaveViewState()

{

object [] iState = new object [ base .List.Count];

for ( int i = 0 ; i < base .List.Count; i ++)

{

iState[i] = ((IStateManager) base .List[i]).SaveViewState();

}

return iState;

}

void IStateManager.LoadViewState( object state)

{

if (state != null )

{

&

Published At
Categories with Web编程
Tagged with
comments powered by Disqus