Bill Paetzke
Bill Paetzke

Reputation: 13592

System.Web.HttpException: Cannot have multiple items selected in a DropDownList

During page load, index 0 was already selected. Then this code statement selected index 1:

dropDownList.Items.FindByValue(myValue).Selected = true; 
// assume myValue is found at index 1 of dropDownList.Items

On completion of page load, the page reads: "System.Web.HttpException: Cannot have multiple items selected in a DropDownList."

Why did I get the exception? And how can I fix it?

Upvotes: 10

Views: 32633

Answers (4)

simonpa71
simonpa71

Reputation: 165

Unfortunately Bill's answer did not work for me, as the problem is mainly in how the duplicate list is built. Also copy and pasting the code to create new list for 16 identical dropdowns is against my principles. (੭ °ཀ°)੭

What worked for me was to duplicate the dropdowns using a combination of the answers for this question and this question and then using SelectedIndex.

        var listShunt = new List<ListItem>();
        while (dr.Read())
        {
            itemShunt = new ListItem(dr["ID","TYPE"]);
            listShunt.Add(itemShunt);
        }
        numberShunt_CH3.DataSource = listShunt.ToArray();
        numberShunt_CH3.DataBind();
        numberShunt_CH3.SelectedIndex = 1;
        ...

        numberShunt_CH7.DataSource = listShunt.ToArray();
        numberShunt_CH7.DataBind();
        numberShunt_CH7.SelectedIndex = 5;
        ...

Upvotes: 0

Adams Biyi
Adams Biyi

Reputation: 1

I had a similar problem but under a slightly different scenario. I thought I should post it and the resolution here as it may help someone save time if they happen to be in my similar scenario.

First the error message:

AMError: Sys.WebForms.PageRequestManagerServerErrorException:
Sys.WebForms.PageRequestManagerServerErrorException: 
Cannot have multiple items selected in a DropDownList.

My Scenario:

I was using using VisualStudio 2010 to step through the application (ASP VB Net) when I encountered the problem. I looked over the 2 dropdownlists on the page, checked the internet and wasted several hours w/o any resolution.

Resolution:

Then I got feedup and exited VS 2010 and took a break. When I came back. I reran the application and there was no problem. That's when I realized my costly mistake: I had setup an expression that set the SelectedValue in the Debugger Watch Window! Hence the multiplicity!

I removed the expression and all was well again --- Visual Studion 2010 able to get past the dropdownlist section onto the another area of focus of the application.

Upvotes: 0

Tom Hamming
Tom Hamming

Reputation: 10981

I just had this problem, and found out it was caused by something different. I was adding the same ListItem instance to multiple dropdowns:

ListItem item = new ListItem("Foo", "1");
ListItem item2 = new ListItem("Bar", "2");
ddl1.Items.Add(item);
ddl2.Items.Add(item);
ddl1.Items.Add(item2);
ddl2.Items.Add(item2);

Then setting the SelectedValue:

ddl1.SelectedValue = "1"; //sets the Selected property of item
ddl2.SelectedValue = "2"; //sets the Selected property of item2

Switching to adding separate instances of ListItem fixed the problem.

My guess is that when you set the SelectedValue of the DropDownList, it sets the Selected property on the appropriate ListItem in its Items collection. So in this case, at the end of the second code block, both items are selected in both dropdowns.

Upvotes: 22

Bill Paetzke
Bill Paetzke

Reputation: 13592

I noticed that both index 0 and index 1 had the properties "Selected" set to true (dropDownList.Items[0].Selected and dropDownList.Items[1].Selected both were true). However, dropDownList.SelectedIndex was still 0, even though index 1 was set most recently.

I tried resolving this by clearing the list selection beforehand.

dropDownList.ClearSelection();
dropDownList.Items.FindByValue(myValue).Selected = true;

But that didn't help. Same exception occurred.

What did help, was setting the selected value another way:

dropDownList.SelectedIndex = dropDownList.Items.IndexOf(dropDownList.Items.FindByValue(myValue));

Now the selection change propogates throughout the list.

So, don't use dropDownList.Items[x].Selected = true/false to change the selected value of a DropDownList. Instead, use dropDownList.SelectedIndex = x;

Upvotes: 38

Related Questions