2012-02-27 19 views
0

私はドロップダウンリストの各選択肢を動的に作成しています。イベントハンドラはC#と完全には機能しません

次のコードでは、各ボタンにイベントハンドラを追加しています。

button.Click += new System.EventHandler(button_Click); 

PlaceHolder1.Controls.Add(button); 

private void button_Click(object sender, EventArgs e) 
{ 
    //Do something... 
    Response.Write("hello"); 
} 

しかし残念ながら、それはそのイベントを発生し、

button_Click次のように私にエラーを与えていない「Index.button_Click(オブジェクトは、System.EventArgs)」はない「メソッド」であります指定されたコンテキストで有効です

どうすれば処理できますか?

protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(this, typeof(Page), "Close", "javascript:OpenPopUp1();", true); 

    if (Session["filter"] == DropDownList1.SelectedValue) 
    { 

    } 
    else 
    { 
     if (Session["filter"] == "") 
     { 
      Session["filter"] = DropDownList1.SelectedValue + ":"; 
     } 
     else 
     { 
      Session["filter"] = DropDownList1.SelectedValue + ":" + Session["filter"]; 
     } 
    } 

    string asd = Session["filter"].ToString(); 

    string[] split = asd.Split(':'); 

    DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex); 
    for (int i = 0; i < split.Count(); i++) 
    { 
     string filter = split[i].ToString(); 

     Button button = new Button(); 
     button.Text = split[i].ToString(); 
     button.ID = split[i].ToString(); 
     button.Attributes.Add("onclick", "remove(" + split[i].ToString() + ")"); 
     button.Click += new System.EventHandler(button_Click); 
     PlaceHolder1.Controls.Add(button); 
    } 
} 

上記は、dropdownselected indexのコード全体を示しています。

+1

* は、*は、あなたがそのコードを入れている:
は今、すべてが言ったことを、私は次の修正(または少なくとも改善)を提供していますか?方法は?もしそうなら、どちらの方法? –

+0

button.Click + =新しいSystem.EventHandler(button_Click); PlaceHolder1.Controls.Add(ボタン);選択インデックス変更方法 – Abhishek

+0

の下に置かれています。完全な方法を示してください。 –

答えて

0
button.Click += new System.EventHandler(button_Click); 
     PlaceHolder1.Controls.Add(button); 

} // <-- end your current method with a curly brace 


// Now start a new method 
    private void button_Click(object sender, EventArgs e) 
    { 
     //do something... 
     Response.Write("hello"); 
    } 
+0

それが行われています。私はそれをどのように作成したかデモンストレーションしていました。 – Abhishek

+0

私はまだ文法エラーがあると思っています - あなたが何かの下に赤い揺らぎの線のためのVisualスタジオの外観を使用している場合... –

+0

その種類のものはありません – Abhishek

0

ここでは多くの問題が発生しているので、あなたが何を追いかけているのかは分かりません。動的に生成されたボタンは、ドロップダウンのSelectedIndexChangedイベントハンドラで作成されているため、次回のポストバック時には存在しません。イベントバインディングもありません。つまり、ページに表示されますが、クリックすると何も処理されません。
第2に、SelectedValueをSessionに格納してからその値を使用してボタンIDを設定するので、ユーザーがページに戻ると重複IDのボタンを作成することになります。 (あなたが選択されたリストアイテムを削除しているのに気づきましたが、セッションオブジェクトにデータが入力されたまま、ページを更新した場合に戻ってきます)
最後の奇妙なことに、それを再現することはできません。どのバージョンの.NETをプログラミングしていますか?あなたはコード・ビハインドのどこからでもボタン・クリック・イベントを呼びますか?

protected void Page_Init(object sender, EventArgs e) 
    { 
     CreateButtons(); 
    } 
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ScriptManager.RegisterStartupScript(this, typeof(Page), "Close", "javascript:OpenPopUp1();", true); 

     if (Session["filter"] == DropDownList1.SelectedValue) 
     { 

     } 
     else 
     { 
      if (Session["filter"] == "") 
      { 
       Session["filter"] = DropDownList1.SelectedValue + ":"; 
      } 
      else 
      { 

       Session["filter"] = DropDownList1.SelectedValue + ":" + Session["filter"]; 
      } 
     } 
     DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex); 
     CreateButtons(); 
    } 
    private void CreateButtons() 
    { 
     PlaceHolder1.Controls.Clear(); 

     if (Session["filter"] != null) 
     { 
      string asd = Session["filter"].ToString(); 

      string[] split = asd.Split(':'); 

      for (int i = 0; i < split.Count(); i++) 
      { 
       string filter = split[i].ToString(); 

       Button button = new Button(); 
       button.Text = split[i].ToString(); 
       button.ID = split[i].ToString(); 
       button.Attributes.Add("onclick", "remove(" + split[i].ToString() + ")"); 
       button.Click += new System.EventHandler(button_Click); 
       PlaceHolder1.Controls.Add(button); 
      } 
     } 
    } 
    private void button_Click(object sender, EventArgs e) 
    { 
     //do something... 
     Response.Write("hello"); 
    } 
関連する問題