用于 ASP.NET的自定义ComboBox服务器控件

分享于 

5分钟阅读

Web开发

  繁體

Sample Image

介绍

在我的工作中,我需要一个ComboBox服务器控件,并且没有我需要的规范。 经过多次搜索和尝试,他们都不满足我的需求,我需要一个像listviewitem一样的输入值。 但是我从这里得到了一个 HTML combobox控件,这是我查找的。 因此我开发了一个基于这个HTML框控件的ComboBox服务器控件,并决定将它与。

背景

HTML组件是使用一个文本框和一个选择生成的,选择在运行时动态重新定位。 我的工作将HTML组件封装为 ASP.NET 服务器控件,你可以像 ASP.NET. 中的典型listcontrol那样使用它

使用代码

可以按以下三种方式使用这里控件:

for(int i=1; i <10; i++)
{
 ComboItem item = new ComboItem("Item"+i.ToString());
 ComboBox1.Items.Add(item);
}
<bestcomy:ComboBoxid="ComboBox2"runat="server"Width="120px"><BESTCOMY:COMBOITEMText="Item1"></BESTCOMY:COMBOITEM><BESTCOMY:COMBOITEMText="Item2"></BESTCOMY:COMBOITEM><BESTCOMY:COMBOITEMText="Item3"Selected="true"></BESTCOMY:COMBOITEM><BESTCOMY:COMBOITEMText="Item4"></BESTCOMY:COMBOITEM></bestcomy:ComboBox>
DataTable dt = new DataTable();
dt.Columns.Add("text", typeof(string));for(int i=1; i <10; i++)
{
 DataRow ndr = dt.NewRow();
 ndr["text"] = "Item" + i.ToString();
 dt.Rows.Add(ndr);
}
ComboBox3.DataSource = dt.DefaultView;
ComboBox3.DataTextField = "text";
ComboBox3.DataBind();

Points of Interest

在往返过程中保持viewstate非常有趣。 你可以看到我是如何实现这一点的,在下面的脚本中:

ComboBox.cs
protectedoverridevoid TrackViewState()
{
 base.TrackViewState ();
 ((IStateManager)this.Items).TrackViewState();
}protectedoverrideobject SaveViewState()
{
 object obj1 = base.SaveViewState();
 object obj2 = ((IStateManager)this.Items).SaveViewState();
 object obj3 = this.Text;
 if(obj1==null && obj2==null && obj3==null)
 returnnull;
 returnnew Triplet(obj1,obj2,obj3);
}protectedoverridevoid LoadViewState(object savedState)
{
 if(savedState!=null)
 {
 Triplet state = (Triplet)savedState;
 base.LoadViewState(state.First);
 ((IStateManager)this.Items).LoadViewState(state.Second);
 _text = (string)state.Third;
 }
}
ComboItemCollection.cs
publicvoid TrackViewState()
{
 this._IsTrackingViewState = true;
 for(int i=0; i <this._items.Count; i++)
 {
 ((IStateManager)this[i]).TrackViewState();
 }
}publicbool IsTrackingViewState
{
 get {
 returnthis._IsTrackingViewState;
 }
}publicobject SaveViewState()
{
 ArrayList list1 = new ArrayList();
 ArrayList list2 = new ArrayList();
 for (int num3 = 0; num3 <this.Count; num3++)
 {
 object obj1 = ((IStateManager)this[num3]).SaveViewState();
 if (obj1!= null)
 {
 list1.Add(num3);
 list2.Add(obj1);
 }
 }
 if (list1.Count >0)
 {
 returnnew Pair(list1, list2);
 }
 returnnull;
}publicvoid LoadViewState(object state)
{
 if (state == null)
 {
 return;
 }
 if (state is Pair)
 {
 Pair pair1 = (Pair) state;
 ArrayList list1 = (ArrayList) pair1.First;
 ArrayList list2 = (ArrayList) pair1.Second;
 for (int num1 = 0; num1 < list1.Count; num1++)
 {
 int num2 = (int) list1[num1];
 if (num2 <this.Count)
 {
 ((IStateManager)this[num2]).LoadViewState(list2[num1]);
 }
 else {
 ComboItem item1 = new ComboItem();
 ((IStateManager)item1).LoadViewState(list2[num1]);
 this.Add(item1);
 }
 }
 }
}
ComboItem.cs
publicvoid TrackViewState()
{
 this._IsTrackingViewState = true;
}publicbool IsTrackingViewState
{
 get {
 returnthis._IsTrackingViewState;
 }
}publicobject SaveViewState()
{
 returnnew Pair(this._text,this._selected);
}publicvoid LoadViewState(object state)
{
 if(state!=null && state is Pair)
 {
 Pair p = (Pair)state;
 this._text = (string)p.First;
 this._selected = (bool)p.Second;
 }
}

历史记录

  • 28 2005年04月 - Items的设计时间支持。
  • 7 2005年04月 - 第一个版本。

COM  Server  控制  asp  asp-net  组合框  
相关文章