2011-06-21 10 views
0
私はPage_LoadCompleteで動的テーブルを作ってるんだ

をでEventHandle _NOT_を追加する方法を、私は、Page_Loadの時で行うカント:をPage_Load

protected void Page_LoadComplete(object sender, EventArgs e) { 
    btn.Click += new EventHandler(b_Click); 
} 

Page_Loadではなくボタンにイベントを追加する方法はありますか?シンプル


、さえない動的コード:Page_Loadの上

void b_Click(object sender, EventArgs e) { 
Label1.Text = "!!!"; 
} 
protected void Page_Load(object sender, EventArgs e) { 
Button1.Click += new EventHandler(b_Click); 
} 

正常に動作します。

protected void Page_LoadComplete(object sender, EventArgs e) { 
Button1.Click += new EventHandler(b_Click); 
} 

on Page_LoadComplete何もしません。

+0

どういう意味ですか、うまくいかないのですか?エラーが発生していますか?または、クリックイベントは単に発火しませんか? –

+0

イベントは単に起動しません。ただページを再ロードするだけです。 – goog

+0

は完全なコードを表示します。 – Reniuz

答えて

0

OKが例です: は、このHTMLスニペットを考える:

<body> 
    <form id="form1" runat="server"> 
    <div> 
    <asp:Button runat="server" Text="Click Me" OnClick="go_" /> 
    </div> 
    </form> 
</body> 

public partial class WebForm1 : System.Web.UI.Page 
{ 
    public int ControlCount 
    { 
     get { return ViewState["Controls"] == null ? 0 : (int)ViewState["Controls"]; } 
     set { ViewState.Add("Controls", value); } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     for(int i = 0; i < ControlCount; i++) 
     { 
      Button b = new Button(); 
      b.Click += btn_Click; 
      b.Text = "Hi"; 
      form1.Controls.Add(b); 
     } 
    } 

    void btn_Click(object sender, EventArgs e) 
    { 
     ((Button)sender).Text = "bye"; 
    } 

    protected void go_(object sender, EventArgs e) 
    { 
     Button btn = new Button(); 
     btn.Text = "Hi"; 
     form1.Controls.Add(btn); 
     btn.Click += new EventHandler(btn_Click); 
     ControlCount++; 
    } 
} 

あなたが最初のボタンに新しいボタンをクリックするたびにテキスト「こんにちは」、そしてあなたがクリックするたびにページに追加されますTHATボタンのテキストのみが「さようなら」に変わります。

これは、コントロールを2回追加するために機能します。私は新しいコントロールが必要であると判断したメインボタンのイベントハンドラに入ってから、もう一度新しい空のページを持つOnLoadでもう一度やり直してください。

+0

intresting ..それは私のために明確になり始めます。 質問についての質問:クリックしたボタンがなぜ「こんにちは」にならなくなったのですか、それはPage_loadのb.Text = "Hi"; '? – goog

0

問題は、コントロールが実行時に作成されているため、ポストバックに存在しないことです。 Initでコントロールを作成するとこれが解決され、イベントが発生するようになります。必要に応じてLoadCompleteのすべてのプロパティを変更できますが、その時点でボタンが存在する必要があります。

0

動的に追加されたコントロールは、ページがリロードされるたびにREaddedする必要があるため、何もしないでください。

コントロール集団はフォームで使用されているデータに基づいているため、すべてのコントロール作成ロジックを1つの関数に入れ、イベントハンドラでデータをマニピュレートしてからコントロール作成ロジック関数を呼び出しますページロードでは、最初に作成されたすべてのコントロールが再作成されるように、コントロール作成機能を呼び出す必要があります(コール間でデータをすでに保持していると仮定します)。その後、彼らは再作成されると、彼らは彼らが発砲したイベントに応答することができます。ここ

+0

申し訳ありませんが、私はあなたの答えを理解するために約1時間を費やしています、私のeanglishが悪いので、私はasp.netで新しいです、私はあなたの答えを簡潔/明確に繰り返すように頼まなければなりません。理解に感謝。 – goog

+0

コードを使用してコントロールを追加する場合は、イベントに応答する前にPageInitまたはPageLoadでそのコントロールを再追加する必要があります。イベントハンドリングはそれまでに完了しているため、LoadCompleteでコントロールを追加することはできません。 –

+0

しかし、PageLoadでは追加するコントロールの数がわかりませんが、イベント処理時に変更できます。 – goog

関連する問題