2009-07-25 6 views
4

Mon événement selectedindexchanged ne se déclenche pas lorsque je sélectionne des valeurs dans mes listes déroulantes. Ces listes déroulantes sont implémentées dynamiquement dans le code suivant. J'ai essayé de changer l'autoropostback et les réglages d'enablestate en vain. J'utilise un panneau statique. Est-ce que quelqu'un voit comment je peux déclencher l'événement selectedindexchanged?ASP.NET/C#: DropDownList L'événement SelectedIndexChanged ne se déclenche pas

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

Répondre

5

Vous n'êtes pas l'attribution d'un gestionnaire d'événements dans votre méthode RecreateDropDownLists() :)

+0

Oui, ça l'a fait! Merci! – salvationishere

2

Vous ne semblez pas être le câblage à l'événement SelectedIndexChanged du DropDownList si elle est postback.

Étant donné que le recréer et le créer semblent fonctionnellement identiques, pourquoi ne pas les fusionner? Encapsuler ce qui varie.

+0

Bon point - je suis ce conseil. – salvationishere

Questions connexes