Solved

Programmatically Select DropDownList Item

Posted on 2008-10-14
5
5,128 Views
Last Modified: 2013-12-17
Experts,

I have the following asp:dropdownlist: (see code snippet).
I am holding user addresses in my database.  The "State" column in the database is/will be updated using the same dropdownlist, so when a user selects 'AZ' from the dropdownlist a "2" will be sent to the database to be stored in the "State" column.

My problem is programmatically changing the selected item of the dropdownlist, based on what I pull from the database.  If I use ddlState.SelectedIndex = 4 (or whatever number within my range) it works just fine.  However I need to pull the # from the database.  I have tried all manner of things, and getting several different errors.  Here are a few things I've tried that aren't working.

1.  ddlState.SelectedIndex = myDataReader["State"];
Error: CS0266: Cannot implicitly convert type 'object' to 'int'. An explicit conversion exists (are you missing a cast?)

2. ddlState.SelectedIndex = Convert.ToInt32(myDataReader["State"]);
Error:System.Web.HttpException: Cannot have multiple items selected in a DropDownList.

3. ddlState.SelectedIndex = ddlState.Items.IndexOf(ddlState.Items.FindByValue(myDataReader["State"].ToString()));
No Error, but does nothing......Index 0 ends of being selected.

4. int i = myDataReader["State"];
    ddlState.Items[i].Selected = true;
Error:  System.Web.HttpException: Cannot have multiple items selected in a DropDownList.

Errors in 2 and 4 are happening I because Index 0 is Selected on Page Load, but I don't understand how this error is happening if the SelectedIndex is being changed before the page is refreshed on a postback?

Please offer advice.  I'm open to change the way I am doing this as well, if a better methodology exists.

Thanks,
Pete.
<asp:DropDownList ID="ddlState" runat="server">
     <asp:ListItem Value="0" Text="AL" />
     <asp:ListItem Value="1" Text="AK" />
     <asp:ListItem Value="2" Text="AZ" />
     <asp:ListItem Value="3" Text="AR" />
     <asp:ListItem Value="4" Text="CA" />
     <asp:ListItem Value="5" Text="CO" />
     //Rest of the 45 States
</asp:DropDownList>

Open in new window

0
Comment
Question by:P1ST0LPETE
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
5 Comments
 
LVL 13

Expert Comment

by:crazyman
ID: 22715372
Have you tried .SelectedValue
0
 
LVL 10

Author Comment

by:P1ST0LPETE
ID: 22715390
Found my answer:

int i = myDataReader["State"];
ddlState.SelectedIndex = i;
0
 
LVL 10

Accepted Solution

by:
P1ST0LPETE earned 0 total points
ID: 22715401
Correction:

int i = Convert.ToInt32(myDataReader["State"]);
ddlState.SelectedIndex = i;
0
 
LVL 13

Expert Comment

by:crazyman
ID: 22715449
I wouldnt save indexes, better of saving the id or code and using SelectedValue, what happens if you add another state in the middle then he indexes wont line up...
0
 
LVL 6

Expert Comment

by:esolve
ID: 22741208
I've just noticed that in your 2nd example you should call the ddlState.ClearSelection(); method to prevent this error from happening again.
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…

739 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question