Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET DropDownList problem : SelectedItem isn't changing

I am populating a DropDownList control as follows -

public partial class UserControls_PMS_Send2DeliveryTeam : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            // SA 100928 Get the delivery teams and their respective email addresses
            string[] delTeam = ConfigurationManager
                               .AppSettings["deliveryTeamNames"]
                               .Split(',');
            string[] delTeamEmails = ConfigurationManager
                                     .AppSettings["deliveryTeamEmails"]
                                     .Split('|');

            if (delTeam.Length != delTeamEmails.Length)
            {
                showAlert("You have an error in the configuration of the delivery teams");
                return;
            }

            for(int looper=0; looper<delTeam.Length; looper++)
                delTeamDDList
                .Items
                .Add
                ( 
                    new ListItem(delTeam[looper], delTeamEmails[looper])
                );

        }

    // Other methods
}

But whenever user selects a value from this dropdown, only the first item is being selected. To clarify more, suppose that the list has 4 items, item 1, item 2, item 3 and item 4. When user selects 4th item from the lists, it selects item 1 as the selected value.

What's the reason behind this?

EDIT

I have just checked the generated HTML for the DropDownList using firebug, and it seems the "selected" value doesn't change at all even if I choose different values from the DropDownList.

The generated HTML is as follows -

<select class="select" id="Send2DeliveryTeam_delTeamDDList" name="Send2DeliveryTeam$delTeamDDList">
    <option value="value1" selected="selected">Project Initiation Team</option>
    <option value="value2">Service Delivery Centre</option>
    <option value="value3">TCS</option>
    <option value="value4">PIT &amp; SDC</option>
    <option value="value5">SDC &amp; TCS</option>
    <option value="value6">PIT &amp; TCS</option>
    <option value="value7">PIT &amp; SDC &amp; TCS</option>
</select>

First, user selects a value from this dropdown list. Then he presses a button, which fires the click event. The button's corresponding event-handler function is the place where I am accessing the dropdownlist's selected value. The code is as follows -

// Button event-handler code
protected void assignDelTeamButton_Click(object sender, EventArgs e)
{
    // This is where I am always getting the same value, no matther what I choose
    // from the dropdown list, and this value is the one which is selected by default
    // when the page loads. I mean, the "SelectedIndex" is always 0.
    string selected_value = delTeamDDList.SelectedItem.ToString();

    // Other  codes
}

The ascx file -

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Send2DeliveryTeam.ascx.cs" Inherits="UserControls_PMS_Send2DeliveryTeam" %>
<div id="Common">
    <h3>Welcome <%string user = HttpContext.Current.Session["user_name"].ToString();%><%=user %></h3>
    <h1>Request Estimate Screen</h1>
    <span>Request Estimate and Assign a Delivery team to a Request</span><br />
    <label>Enter an existing project number</label>
    <asp:TextBox ID="reqNum" runat="server" CssClass="textBox" /><br />
    <label>Select Delivery Team</label>
    <asp:DropDownList ID="delTeamDDList" runat="server" CssClass="select" >

    </asp:DropDownList>
    <label> - Sorted in alpha order</label><br /><br />
    <label>&nbsp;</label>
    <asp:button ID="assignDelTeamButton" runat="server" Text="Continue" 
    CssClass="button" onclick="assignDelTeamButton_Click"/><br />
</div>

Second Edit

If I hard-code the ListItems as follows, it works perfectly -

<asp:DropDownList ID="delTeamDDList" runat="server" CssClass="select" >
    <asp:ListItem Text="Project Initiation Team" Value="[email protected]"></asp:ListItem> 
    <asp:ListItem Text="Service Delivery Centre" Value="[email protected]"></asp:ListItem>
    <asp:ListItem Text="TCS" Value="[email protected]"></asp:ListItem> 
    <asp:ListItem Text="PIT & SDC" Value="[email protected]"></asp:ListItem> 
    <asp:ListItem Text="SDC & TCS" Value="[email protected]"></asp:ListItem> 
    <asp:ListItem Text="PIT & TCS" Value="[email protected]"></asp:ListItem> 
    <asp:ListItem Text="PIT & SDC & TCS" Value="[email protected]"></asp:ListItem> 
</asp:DropDownList>
like image 879
MD Sayem Ahmed Avatar asked Sep 28 '10 04:09

MD Sayem Ahmed


4 Answers

Do one of the following:

  1. Turn on ViewState in Web.config or containing page if it's off there.
  2. Better yet, make sure ViewState is still enabled, but populate your DDL in your User Control's Init (but don't wrap it with !IsPostBack). This will have your data access logic on every page/control init, even on postback, but it won't add unnecessary data to ViewState as you're not init'ing your DLL, then having ViewState track the changes you make to it's data source. However, you still want ViewState because DDLs in ASP.NET require ViewState in order to track the selected index/value on postback (if you completely turn off ViewState you can only get the DDLs posted back selected value by finding it in the posted Request's FORM NameValueCollection).
like image 60
Ted Avatar answered Nov 03 '22 09:11

Ted


if you are doing this on page load make sure that you enclose it in if( !IsPostBack ){...}

like image 30
Vinay B R Avatar answered Nov 03 '22 07:11

Vinay B R


How is the userControl being added to the page? Are you doing it dynamically using the LoadControl("...Send2DeliveryTeam.ascx"); technique? If so, make sure you call LoadControl in your aspx page Page_Init handler. Any later and the ViewState will fail to be applied to the ddl in the control and the selection will be lost.

Also, be aware that if you set Visible = false on the control, it will not be rendered at all. In which event are you doing this?

like image 4
Daniel Dyson Avatar answered Nov 03 '22 07:11

Daniel Dyson


Instead of using SelectedItem try using SelectedText. I have encounter the same problem in a C# win-forms application and although you would think (at least I did) that SelectedText would add text to the drop-down it actually selects the item with that text.

Hope this helps.

like image 2
Gage Avatar answered Nov 03 '22 08:11

Gage