title: ASP.NET / C#: DropDownList SelectedIndexChanged event not firing
body: <p>My selectedindexchanged event is not firing when I select values in my dropdown lists.  These dropdown lists are implemented dynamically in the following code.  I have tried changing autopostback and enableviewstate settings to no avail.  I am using a static panel.  Does anyone see how I can cause the selectedindexchanged event to fire?</p>
  
  <pre><code>using System;
  using System.Collections;
  using System.Collections.Generic;
  using System.Data;
  using System.Data.SqlClient;
  using System.Diagnostics;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using ADONET_namespace;
  
  namespace AddFileToSQL
  {
      public partial class DataMatch : _Default
      {
          protected System.Web.UI.WebControls.PlaceHolder phTextBoxes;
          protected System.Web.UI.WebControls.PlaceHolder phDropDownLists;
          protected System.Web.UI.WebControls.Button btnAnotherRequest;
          protected System.Web.UI.WebControls.Panel pnlCreateData;
          protected System.Web.UI.WebControls.Literal lTextData;
          protected System.Web.UI.WebControls.Panel pnlDisplayData;
          //Panel pnlDropDownList;
  
          protected static string inputfile2;
          static string[] headers = null;
          static string[] data = null;
          static string[] data2 = null;
          static DataTable myInputFile = new DataTable("MyInputFile");
          static string[] myUserSelections;
  
          // a Property that manages a counter stored in ViewState
          protected int NumberOfControls
          {
              get { return (int)ViewState["NumControls"]; }
              set { ViewState["NumControls"] = value; }
          }
  
          public void EditRecord(object recordID)
          {
              SelectedRecordID = recordID;
              // Load record from database and show in control
          }
  
          protected object SelectedRecordID
          {
              get
              {
                  return ViewState["SelectedRecordID"];
              }
              set
              {
                  ViewState["SelectedRecordID"] = value;
              }
          }
  
          // Page Load 
          private void Page_Load(object sender, System.EventArgs e)
          {
              if (!Page.IsPostBack)
              {
                  this.NumberOfControls = 0;
              }
          }
  
          // Add DropDownList Control to Placeholder
          private void CreateDropDownLists()
          {
              for (int counter = 0; counter &lt; NumberOfControls; counter++)
              {
                  DropDownList ddl = new DropDownList();
                  SqlDataReader dr = ADONET_methods.DisplayTableColumns(targettable);
                  ddl.ID = "DropDownListID" + (counter + 1).ToString();
                  ddl.DataTextField = "COLUMN_NAME";
                  ddl.DataValueField = "COLUMN_NAME";
                  ddl.DataSource = dr;
                  ddl.DataBind();
  
                  //myUserSelections[counter] = "";
  
                  ddl.AutoPostBack = true;
                  ddl.EnableViewState = true; //Preserves View State info on Postbacks
                  ddl.Style["position"] = "absolute";
                  ddl.Style["top"] = 100 * counter + 80 + "px";
                  ddl.Style["left"] = 250 + "px";
                  ddl.SelectedIndexChanged += new EventHandler(SelectedIndexChanged);
  
                  pnlDisplayData.Controls.Add(ddl);
                  pnlDisplayData.Controls.Add(new LiteralControl("&lt;br&gt;&lt;br&gt;&lt;br&gt;"));
                  pnlDisplayData.Visible = true;
  
                 // pnlDropDownList.FindControl(ddl.ID);
                  dr.Close();
              }
          }
  
          protected void SelectedIndexChanged(object sender, EventArgs e)
          {
              DropDownList ddl = (DropDownList)sender; 
              string ID = ddl.ID;
          }
  
          // Add TextBoxes Control to Placeholder
          private void RecreateDropDownLists()
          {
              for (int counter = 0; counter &lt; NumberOfControls; counter++)
              {
                  DropDownList ddl = new DropDownList();
                  SqlDataReader dr = ADONET_methods.DisplayTableColumns(targettable);
  
                  ddl.ID = "DropDownListID" + (counter + 1).ToString();
                  ddl.DataTextField = "COLUMN_NAME";
                  ddl.DataValueField = "COLUMN_NAME";
                  ddl.DataSource = dr;
                  ddl.DataBind();
                  myUserSelections[counter] = "";
                  dr.Close();
  
                  ddl.AutoPostBack = true;
                  ddl.EnableViewState = false; //Preserves View State info on Postbacks
                  ddl.Style["position"] = "absolute";
                  ddl.Style["top"] = 100 * counter + 80 + "px";
                  ddl.Style["left"] = 250 + "px";
                  pnlDisplayData.Controls.Add(ddl);
                  pnlDisplayData.Controls.Add(new LiteralControl("&lt;br&gt;&lt;br&gt;&lt;br&gt;"));
              }
          }
  
          // Create TextBoxes and DropDownList data here on postback.
          protected override void CreateChildControls()
          {
              // create the child controls if the server control does not contains child controls
              this.EnsureChildControls();
  
              // Creates a new ControlCollection. 
              this.CreateControlCollection();
  
              // Here we are recreating controls to persist the ViewState on every post back
              if (Page.IsPostBack)
              {
                  RecreateDropDownLists();
                  RecreateLabels();
              }
              // Create these conrols when asp.net page is created
              else
              {
                  PopulateFileInputTable();
                  CreateDropDownLists();
                  CreateLabels();
              }
  
              // Prevent child controls from being created again.
              this.ChildControlsCreated = true;
          }
  
          // Read all the data from TextBoxes and DropDownLists 
          protected void btnSubmit_Click(object sender, System.EventArgs e)
          {
              int cnt = FindOccurence("DropDownListID");
              EditRecord("DropDownListID" + Convert.ToString(cnt + 1));
              AppendRecords();
              pnlDisplayData.Visible = false;
          }
  
          private int FindOccurence(string substr)
          {
              string reqstr = Request.Form.ToString();
              return ((reqstr.Length - reqstr.Replace(substr, "").Length) / substr.Length);
          }
      }
  }
  </code></pre>