2009-07-25 21 views
4

ドロップダウンリストで値を選択すると、selectedindexchangedイベントが発生しません。これらのドロップダウンリストは、次のコードで動的に実装されます。私はautopostbackとenableviewstate設定を無駄に変更しようとしました。私は静的パネルを使用しています。誰かが私がselectedindexchangedイベントを発生させる方法を見ているのですか?ASP.NET/C#:DropDownList SelectedIndexChangedイベントが起動しない

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

答えて

5

あなたのRecreateDropDownLists()方法:)

+0

はい、これはそれでした!ありがとう! – salvationishere

2

にイベントハンドラを割り当てていないあなたはそれがポストバックだ場合のDropDownListのSelectedIndexChangedイベントまで配線されていないようです。

再作成と作成の両方が機能的に同一であるとすれば、それらをマージしないのはなぜですか?変化するものをカプセル化する。

+0

良い点 - 私はこのアドバイスに従います。 – salvationishere

関連する問題