ASP.NET/C#: DropDownList SelectedIndexChanged event does not fire

The selected selectedexchanged event does not fire when I select the values ​​in my lists. These drop-down lists are dynamically implemented in the following code. I tried to change the autorun options and enableviewstate to no avail. I am using a static panel. Does anyone see how I can raise a selectedexexchanged event to fire?

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 < 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("<br><br><br>")); 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 < 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("<br><br><br>")); } } // 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); } } } 
+4
source share
2 answers

You do not assign an event handler to your RecreateDropDownLists() method :)

+5
source

It seems you are not connecting to the DropDownList SelectedIndexChanged event if it was sent back.

Given that recreation and creation seem functionally identical, why not combine them? Encapsulate what is changing.

+2
source

All Articles