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

Easiest way to Create a Multiselect Dropdown in ASP.NET 4.0 using C#

By , 22 Mar 2013
 

Multiselect_Dropdownlist/multi2.PNG

Introduction

In this article, I will show you how to create a multi-select control in ASP.NET. I will keep this article short and sweet so you can just use the code in your applications. Previously I referred to many codes for a multiselect dropdown but I found they were all a little complex to implement. So I decided to try it on my own. Let's see how I implemented this.

Background

First, you must install AJAX controls in Visual Studio. I am using VS2010. This is because I am using the popup control extender to implement this control.

Using the code

Place a textbox in Design view and assign the popup extender for that textbox. An important thing to note here is you must place your textbox control within the UpdatePanel.

Afterwards, you create a panel and within this panel, you put a checkboxlist. You then assign this panel to the PopupControlID property of the popup extender.

Now take a look at this code:

<%@ Page Language="C#" AutoEventWireup="true" 
   CodeFile="multidropdown.aspx.cs" Inherits="_Default" %>

<%@ Register Assembly="AjaxControlToolkit" 
  Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ToolkitScriptManager runat="server">
        </asp:ToolkitScriptManager>

        <asp:UpdatePanel ID="updatepanel1" runat="server">

            <ContentTemplate>

                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

                <asp:PopupControlExtender 
                    ID="TextBox1_PopupControlExtender" runat="server"
                    Enabled="True" ExtenderControlID="" 
                    TargetControlID="TextBox1" 
                    PopupControlID="Panel1" OffsetY="22">
                </asp:PopupControlExtender>

                <asp:Panel ID="Panel1" runat="server" 
                     Height="116px" Width="145px" 
                     BorderStyle="Solid" BorderWidth="2px" 
                     Direction="LeftToRight"
                     ScrollBars="Auto" BackColor="#CCCCCC" 
                     Style="display: none">
                   
                    <asp:CheckBoxList ID="CheckBoxList1" runat="server" 
                          DataSourceID="SqlDataSource1" DataTextField="holiday_name"
                         DataValueField="holiday_name" AutoPostBack="True"
                        OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
                    </asp:CheckBoxList>

                    <asp:SqlDataSource ID="SqlDataSource1" 
                          runat="server" ConnectionString="<%$ 
                          ConnectionStrings:employeedbConnectionString %>"
                        SelectCommand="SELECT [holiday_name] FROM [tblholidaymas]"> 
                     </asp:SqlDataSource>
                </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

Here, you select the datasource from your SQL Server database.

Multiselect_Dropdownlist/multi1.PNG

Finally, we need to do one more modification in the code-behind. Each time we click the checkboxlist, the selected value will be added to the textbox control. So in the selected index changed event, you will place this code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    
    }
  
    protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string name = "";
        for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        {
            if (CheckBoxList1.Items[i].Selected)
            {
                name += CheckBoxList1.Items[i].Text + ",";
            }
        }
        TextBox1.Text = name;
    }
}

That's all.

License

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

About the Author

CS1401
Software Developer (Junior) CS1401
India India


Any fool can write code that a computer can understand. Good programmers write code that humans can understand.


Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionBeware SQL InjectionmemberStephen Inglish14-Sep-11 1:51 
I just wanted to add this little addendum so anyone using this will remember; when you take a comma separated list from the user (in this case, the textbox), it may be easy and convenient to send it to the database in a WHERE clause or some other SQL structure. NEVER trust data retrieved from the user, always sanitize it first. Someone can just as easily not check any values, and just type "1=1;DROP {YOUR DATABASE};--"
 
http://msdn.microsoft.com/en-us/library/ms161953.aspx[^]
Stephen Inglish
Consultant
Sogeti USA
MCPD: Windows Developer
MCPD: Web Developer
MCPD: Enterprise Developer

AnswerRe: Beware SQL Injection PinmemberCS140114-Sep-11 2:40 
Thanks for your alert Stephen Inglish. But if we use the "Read Only" property in a textbox attackers cant type any new parameters or text values inside the textbox. so i think it can avoid sql injection. am i right? if its wrong forgive me. Smile | :)
...

GeneralRe: Beware SQL Injection PinmemberMarcus Kramer14-Sep-11 3:11 
Yes and No.
Users can also sniff your response and generate their own. In this way they can still inject whatever they want into that section.
My motto is that again to never, ever transfer any data to a database without sanitizing it first. It's just good practice.
I wasn't, now I am, then I won't be anymore.

GeneralRe: Beware SQL Injection PinmemberCS140114-Sep-11 3:21 
Thank you sir. Hereafter i will remember your advice. Big Grin | :-D
...

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

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130617.1 | Last Updated 23 Mar 2013
Article Copyright 2011 by CS1401
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid