Click here to Skip to main content
Click here to Skip to main content

DropDown and MultiselectDropDown Controls for ASP.NET

, 6 May 2009 CPOL
Rate this:
Please Sign up or sign in to vote.
Custom DropDown and MultiselectDropDown controls with data binding support


This article discusses about two user controls written in ASP.NET. Working on a project recently, I needed to develop a custom DropDown control with multiselect options in the form of CheckBox. I searched around for something simple, yet useful for my needs, and I wasn't able to find anything, so I developed my own control. Later, I reused the code to create a regular DropDown control (no multiselect checkbox options). The two controls can be merged into one, but I might do that at a later stage. On to the controls. 


This control can be bound to a IListSource to fetch data to be populated, in addition to the regular Items collection that can be populated from the asp. Here are a few examples of how this control can be used in ASPX.

<%@ Register Src="Controls/DropDown.ascx" TagName="DropDown" TagPrefix="thp" %>

<thp:DropDown ID="DropDown1" runat="server" Width="200">
          <asp:ListItem Text="Some text" Value="0" Selected="True" />
          <asp:ListItem Text="Another option" Value="1" />
<thp:DropDown ID="DropDown2" runat="server" Width="200" DataSourceID="DataSource1"
            DataTextField="Name" DataValueField="Id" />
<thp:DropDown ID="DropDown3" runat="server" Width="200" 
         DataTextField="Name" DataValueField="Id" OnClientChange="onDropDownChange" />

Here's a screenshot of what the above code would render:


Both controls support the following data events:

  • ItemDataBound - Fired after the object has been bound to an Item. The argument passes both the bound object (DataObject) and the ListItem.
  • NeedDataSource - Fired when there's no DataSourceID specified. This event is helpful when you want to manually populate the controls with your data. See the source code provided for specifics on this, you can use either Items collection or create custom list source (or both).


The code and usage is exactly as the DropDown control. Here's a screenshot of all of the above scenarios:


The styling in the attached project uses .skin files in the default theme. You can easily modify these to fit your needs. Everything can be styled.

I hope you find this code useful. I recommend this to anyone that wants to start developing custom controls as it has very important features implemented, such as the IPostBackDataHandler interface to pass data between postbacks in a custom manner. It also features some nice DataBinding examples and how you can use and modify these to perform specific tasks.


  • 6th May, 2009: Initial post


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Tomislav Markovski
Web Developer
Macedonia, The Republic Of Macedonia, The Republic Of
No Biography provided

Comments and Discussions

SuggestionThis control doesn't work if there is an async postback in Web page PinmemberPham Dinh Truong10-Jul-13 19:08 
This control doesn't work if there is an async postback in Web page. More specifically, click on drop down image doesn't do anything.
Solution: Use ScriptManager.RegisterStartupScript to register script, don't use the inline label (id=ClientScriptLabel) to wrap the script.
//Register script with ScriptManager for async postback
ScriptManager.RegisterStartupScript(this, this.GetType(), "multiselect_dropdown_script", script, false);
Hope it should help.
SuggestionJavaScript functions will be duplicated if initiating more than 2 MultiSelectDropDown controls [modified] PinmemberPham Dinh Truong10-Jul-13 9:00 
GeneralMy vote of 5 PinmemberPham Dinh Truong10-Jul-13 1:39 
BugChrome Bug Pinmemberdinesh_22-Mar-13 19:02 
AnswerRe: Chrome Bug [modified] PinmemberPham Dinh Truong10-Jul-13 8:46 
BugTalk about Validation Pinmemberdinesh_5-Jan-13 19:39 
Generalsearchable option for this Pinmemberraj chitty19-Jul-12 1:49 
GeneralMy vote of 5 PinmemberBALAKUMARAN198715-Jun-12 5:26 
QuestionCreate Control Dynamically PinmemberFrank A M20-Apr-12 9:15 
AnswerRe: Create Control Dynamically PinmemberFrank A M1-May-12 11:42 
QuestionHow to connect to sql datasource. Pinmembervishalmetkar30-Sep-11 22:37 
QuestionBug Pinmemberig88sir18-Jul-11 9:53 
AnswerRe: Bug PinmemberTomislav Markovski18-Jul-11 9:57 
GeneralRe: Bug Pinmemberig88sir18-Jul-11 10:25 
GeneralAssign datatable to it Pinmemberashu21882-May-11 17:32 
GeneralRe: Assign datatable to it PinmemberTomislav Markovski2-May-11 22:14 
QuestionWant to change data at runtime? PinmemberMansi20109-Nov-10 1:05 
GeneralRequest Pinmemberabhinav86420-Oct-10 8:36 
GeneralRe: Request Pinmemberashu21882-May-11 17:43 
GeneralJust what i needed PinmemberDavevandeven5-Jan-10 2:46 
GeneralLooks great PinmemberJeffCirceo11-May-09 17:17 
Generalcool article PinmemberJuraj Suchan6-May-09 7:56 
GeneralGreat idea. Pinmembergstolarov6-May-09 7:01 
GeneralRe: Great idea. PinmemberTomislav Markovski6-May-09 23:29 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.150327.1 | Last Updated 6 May 2009
Article Copyright 2009 by Tomislav Markovski
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid