3

行の追加ボタンがクリックされるたびに行を追加する動的テーブルを作成しています。ボタンをプログラムで作成し、テーブル ヘッダーに追加しています。そのボタンの下、同じ列に行の削除ボタンもあります。

問題がありますが、ボタンをクリックしてもイベントが呼び出されません。ボタンを正しく作成していますか? そうでない場合は、どうすればよいですか?もしそうなら、何が問題か分かりますか?

リージョン Add_Table_Header

    TableHeaderCell thcOne = new TableHeaderCell();
    TableHeaderCell thcTwo = new TableHeaderCell();
    TableHeaderCell thcThree = new TableHeaderCell();
    TableHeaderCell thcrFour = new TableHeaderCell();
    TableHeaderCell thcFive = new TableHeaderCell();
    TableCell thcRowAction = new TableCell(); //THIS IS THE COLUMN WITH THE 
                                              //ADD BUTTON

    thcOne.Text = "Who";
    thcTwo.Text = "Date Started";
    thcThree.Text = "Date Ended";
    thcrFour.Text = "Causes?";
    thcFive.Text = "Result";

            //HERE IS WHERE I CREATE AND ADD THE BUTTON

    Button addRowButton = new Button();
    addRowButton.Text = "Add Row";
    addRowButton.Click += new EventHandler(this.AddNewRow_Click);
    thcRowAction.Controls.Add(addRowButton);

    TableHeaderRow headerRow = new TableHeaderRow();
    headerRow.Cells.Add(thcOne);
    headerRow.Cells.Add(thcTwo);
    headerRow.Cells.Add(thcThree);
    headerRow.Cells.Add(thcrFour);
    headerRow.Cells.Add(thcFive);
    headerRow.Cells.Add(thcRowAction);

    table.Rows.Add(headerRow);

    #endregion


protected void AddNewRow_Click(object sender, EventArgs e)
    {
        if (ViewState["RowsCount"] != null)
        {
            numOfRows = Convert.ToInt32(ViewState["RowsCount"]);
            GenerateTable(numOfRows);
        }
    }

もう一度、ボタンが表示されますが、正しいイベント メソッドを入力しません。あなたの助けと時間をありがとう:)

ちなみに、次のように宣言的に行う場合:

<asp:Button ID="BTNAdd" runat="server" Text="Add New Row" OnClick="AddNewRow_Click" />

イベントは登録され、完全に正常に機能します。

新しい情報: 削除ボタンも表示されています。どのタイプのイベントも登録していませんが、クリックすると、行の追加ボタンとまったく同じことが行われます。これは、マスター ページまたは別のページが原因である可能性があります。ソースはボタンに最初に何をすべきか、またはデフォルトで何をすべきかを伝えていますか?

ありがとう :)

4

1 に答える 1

5

ViewState とイベントが適切にトリガーされるように、ページの Init イベント ハンドラーに動的コントロールを追加する必要があります。

これを試してください:

protected void Page_Init(object sender, EventArgs e)     
     {         
         Button btn = new Button();         
        btn.ID = "btnTest";         
         btn.Text = "I was dynamically created";         
         btn.Click += new EventHandler(btnTest_Click);         
        Panel1.Controls.Add(btn);     
     }
于 2012-04-30T17:35:18.913 に答える