web-dev-qa-db-ja.com

asp.netはイベントハンドラーで動的にボタンを押します

ここで、asp.netで動的に生成されたボタンとそのイベントハンドラーに小さな問題があります。特別なユーザーのために追加のボタンを備えた柔軟なテーブルを生成します。ボタンは動的に生成され、正常に機能します。しかし、イベントハンドラーを機能させることができません。

これが私のコードの一部です:ボタンを作成します(独自の関数で)。

…
Button ButtonChange = new Button();

ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click += new EventHandler(test);
…

そして

void test(object sender, EventArgs e)
{ 
   // Do some stuff       
}

ぼくの Page_Loadは空です。

しかし、ボタンをクリックしても、プログラムはテストにジャンプしません。何が問題なのですか?

編集!!!問題は、SQLクエリから返される行数が最初からわからないことです。すべての行に、削除ボタンと変更ボタンを追加します。プログラムで、結果をテーブルとして作成するメソッドを呼び出します。このメソッドでは、現在のユーザーがAdminUserであるかどうかを確認し、そうである場合はbuildAdminButtons関数を呼び出します。ここでは、すべての行について、新しい列にボタンを作成します。 OnLoadでこれを取得するにはどうすればよいですか?

private void buildAdminButtons(TableRow tempRow, int i)
{
    Button ButtonDelete = new Button();
    Button ButtonChange = new Button();

    TableCell change = new TableCell();
    TableCell delete = new TableCell();

    ButtonChange.Text = "Change";
    ButtonChange.ID = "change_" + i.ToString();
    ButtonChange.Font.Size = FontUnit.Point(7);
    ButtonChange.ControlStyle.CssClass = "button";


    ButtonDelete.Text = "Delete";
    ButtonDelete.ID = "delete_" + i.ToString();
    ButtonDelete.Font.Size = FontUnit.Point(7);
    ButtonDelete.ControlStyle.CssClass = "button";

    change.Controls.Add(ButtonChange);
    delete.Controls.Add(ButtonDelete);

    tempRow.Cells.Add(change);
    tempRow.Cells.Add(delete);
}

すべてのボタンに一意のIDを追加しますが、最初はわかりません。どうすればこれを処理できますか?

8

thatコードをpage_loadまたはpage_initイベントに配置する必要があります。

protected void Page_Load()
{
  Button ButtonChange = new Button();

  ButtonChange.Text = "Change";
  ButtonChange.ID = "change_" + i.ToString();
  ButtonChange.Font.Size = FontUnit.Point(7);
  ButtonChange.ControlStyle.CssClass = "button";
  ButtonChange.Click += new EventHandler(test);
}

MSDNの記事を読む- 方法:プログラムでASP.NET Webページにコントロールを追加しますか?

14
adatapost