我在Web项目的开发过程中很多时候都要用到ComboBox,找了很多类似的控件来用发现都不尽如人意,我所希望的能够在WEB上使用的ComboBox应该就是在DropDownList的功能上加入了文本输入功能,我个人比较看重的一点就是下拉列表应该可以伸展到浏览器之外,然而目前大多数的ComboBox要么是用DIV来显示选择项,要么就是用TextBox+ListBox,DIV的方式会不能伸展到浏览器之外,而TextBox+ListBox方式ListBox占用页面空间。后来发现了A DHTML combo box , 于是决定基于此HTC开发一个ASP.NET服务器控件.

ASP.NET服务器控件开发简介: ComboBox [开放源代码]

关键类设计

  • ComboBox : 关键是有一个Text属性获取控件值,没有SelectedIndexChanged事件(我觉得该事件对ComboBox来说不是很重要,当然你也可以根据你自己的需要增加对此事件的支持),Items属性当然是必不可少的;
  • ComboItem : 相对于ListItem来说我没有设计Value属性;
  • ComboItemCollection : 这是ComboItem的集合类,实现了ICollection接口,其功能类似ListItemCollection。

实现ViewState

实现ViewState是我个人觉得最有趣的部分,根据类的层次结构,先看看ComboItem如何实现ViewState,其实很简单,就是实现System.Web.UI.IStateManager接口:

ASP.NET服务器控件开发简介: ComboBox [开放源代码]public void TrackViewState()
        }

SaveViewState()方法保存了ComboItem的Text和Selected属性,而LoadViewState(object state)则还原了这两个属性。

接着看看ComboItemCollection,同样实现IStateManager接口:

ASP.NET服务器控件开发简介: ComboBox [开放源代码]public void TrackViewState()
        }

SaveViewState()方法逐项保存视图状态,LoadViewState(object state) 逐项还原。

最后看看ComboBox,重写了如下一些方法:

ASP.NET服务器控件开发简介: ComboBox [开放源代码]protected override void TrackViewState()
        }

SaveViewState()方法保存了基类的视图状态,同时将Items属性和Text属性保存到视图状态中,而LoadViewState(object savedState)方法则实现还原。

实现IPostBackDataHandler接口

ASP.NET服务器控件开发简介: ComboBox [开放源代码]public void RaisePostDataChangedEvent()
        }

实现数据绑定

如何像DropDownList一样实现数据绑定,也是我十分关心的部分。关键是重写OnDataBinding方法,同时增加了一个类DataSourceHelper来解析数据源。

ASP.NET服务器控件开发简介: ComboBox [开放源代码]protected override void OnDataBinding(EventArgs e)
        }

三种使用方式

  1. 编程方式:

    ASP.NET服务器控件开发简介: ComboBox [开放源代码]for(int i=1; i < 10; i++)
                    }

  2. 数据绑定方式

    ASP.NET服务器控件开发简介: ComboBox [开放源代码]DataTable dt = new DataTable();
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                dt.Columns.Add(
    "text"typeof(string));
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                
    for(int i=1; i < 10; i++)
                    ComboBox3.DataBind();

  3. 页面直接申明方式

    ASP.NET服务器控件开发简介: ComboBox [开放源代码]<bestcomy:ComboBox id="ComboBox2" runat="server" Width="120px">
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                
    <BESTCOMY:COMBOITEM Text="Item1"></BESTCOMY:COMBOITEM>
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                
    <BESTCOMY:COMBOITEM Text="Item2"></BESTCOMY:COMBOITEM>
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                
    <BESTCOMY:COMBOITEM Text="Item3" Selected="true"></BESTCOMY:COMBOITEM>
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]                
    <BESTCOMY:COMBOITEM Text="Item4"></BESTCOMY:COMBOITEM>
    ASP.NET服务器控件开发简介: ComboBox [开放源代码]            
    </bestcomy:ComboBox>

源代码下载

https://files.cnblogs.com/bestcomy/WebControlTest.rar

声明

欢迎转载,转载请注明出处。发布到商业性电子或者平面媒体需征得作者同意。
本组件已经由本人在CodeProject.com发布: Custom ComboBox server control for ASP.NET

相关文章:

  • 2022-03-10
  • 2022-02-20
  • 2021-11-27
  • 2022-12-23
猜你喜欢
  • 2021-10-14
  • 2021-11-08
  • 2022-01-21
  • 2021-08-07
  • 2021-05-21
  • 2022-12-23
相关资源
相似解决方案