2009-07-25 6 views
4

Mein Ereignis "selectedindexxchanged" wird nicht ausgelöst, wenn ich Werte in meinen Dropdown-Listen auswähle. Diese Dropdown-Listen werden im folgenden Code dynamisch implementiert. Ich habe versucht, autopostback zu ändern undviewstate Einstellungen zu vergeben, ohne Erfolg. Ich verwende ein statisches Panel. Kann jemand sehen, wie ich das selectedindexexchange-Ereignis auslösen kann?ASP.NET/C#: DropDownList Das Ereignis "SelectedIndexChanged" löst nicht aus

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); 
     } 
    } 
} 

Antwort

5

Sie sind nicht ein Event-Handler in Ihrer RecreateDropDownLists() Methode zuweisen :)

+0

Ja, das war es! Vielen Dank! – salvationishere

2

Sie scheinen nicht zu dem Ereignis SelectedIndexChanged des Dropdownlist Verdrahtung bis zu werden, wenn es Postbacks ist.

Angesichts der beiden scheinen die neu erstellen und das Erstellen funktional identisch, warum nicht diese zusammenführen? Verkapseln Sie, was variiert.

+0

Guter Punkt - ich werde diesen Rat befolgen. – salvationishere