user1318369
user1318369

Reputation: 715

For a dropdownlist, SelectedIndex always returns the value 0

I have a dropdown in my webpage, which always returns the value 0 as the selected index no matter whichever item the user selects. I have populated the dropdown using a DB query. And I am populating in on Page_Load method in my page. The code shown below does the specified work: int danceid;

    protected void Page_Load(Object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            PopulateDanceDropDown();
        }

    }    

    private void PopulateDanceDropDown()
    {         
        DataTable dt = new DataTable();DataRow row = null;
        dt.Columns.Add("Did", Type.GetType("System.Int32"));
        dt.Columns.Add("DName", Type.GetType("System.String"));    
        var dancer_dance = (from dd in context.DANCER_AND_DANCE
                       where dd.UserId == dancerId
                       select new
                       {
                           Value = dd.DanceId,
                           Text = dd.DanceName

                       }).ToList();    

        foreach (var dndd in dancer_dance)
        {        
            row = dt.NewRow();
            row["Did"] = dndd.Value;
            row["DName"] = dndd.Text;
            dt.Rows.Add(row);    dances.DataSource = dt;    
            dances.DataTextField = dt.Columns[1].ToString();
        if (!IsPostBack)
        {
            dances.DataBind();
        }

    }    
    protected void changeIndex(object o, EventArgs e)
    {
        danceid = dances.SelectedIndex;
    }
    protected void dropthedance(object o, EventArgs e)
    {
        int danceIDFromDropDown = danceid;
        var dancer_dance = from dd in context.DANCER_AND_DANCE
                           where dd.DanceId == danceIDFromDropDown
                           select dd;
        foreach (var dndd in dancer_dance)
        {
             context.DANCER_AND_DANCE.DeleteOnSubmit(dndd);

        }
        try
        {
            context.SubmitChanges();
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
  }

The line int danceIDFromDropDown = danceid; in the method dropthedance always has the value 0. Pleaseeeeeeeeeeeeee help someone

Upvotes: 0

Views: 6120

Answers (2)

Sinaesthetic
Sinaesthetic

Reputation: 12241

Are you sure that you want to be using the index as the ID? Typically, you're going to want to set the actual ID from your database as the DataValueField and then you can grab the value that way.

But I also noticed that you grab the index and place it into a variable on the indexchanged event and then you try to use that value in a different method. I'm assuming that danceid is an attribute somewhere not shown here. At any rate, the value isn't persisting through postbacks. Instead of trying to store it in a variable like you would on a desktop application, try adding EnableViewState="True" to your dropdown control. Then get that index on your submit handler directly. Or if you really want to store it in a variable, then try persisting the value of that variable by storing it in the session or caching it, then pull from that cache/session variable when it comes time to actually use the value.

But again, it might be better practice to place the danceid in the listitem object itself. Just the though of basing IDs on item indexes makes me shudder, especially when you populating the list from a database, because what happens when you add a new item to that list in the library and then try to sort them by name... then your indices become useless.

Upvotes: 1

sarwar026
sarwar026

Reputation: 3821

Replace

int danceIDFromDropDown = danceid;

with

int danceIDFromDropDown = dances.SelectedIndex;

It may work.

Upvotes: 1

Related Questions