検索機能を持つカスタム コントロールがあります。ユーザーが検索をクリックすると、コードは検索結果に基づいてボタンのリストを生成します。
各ボタンの CommandArgument プロパティには、検索結果の ID が含まれています。ユーザーがボタンをクリックすると、イベントを処理し、CommandArgument を取得して、値を使用してメイン ページにイベントを発生させます。
問題は、ボタンがイベントを発生させていないことです。これは、ポストバックなどで失われるためだと思います。これを機能させるには、値をリストする別の方法を検討する必要がありますか?
これを回避する最も簡単な方法は何ですか? ここに私が持っているものがあります:
private void Search()
{
foreach (var c in companies)
{
TableRow companyRow = new TableRow();
TableCell nameRowCell = new TableCell();
TableCell regRowCell = new TableCell();
Button selectButton = new Button();
selectButton.CommandArgument = c.Id.ToString();
selectButton.Text = c.Name;
selectButton.Click += new EventHandler(selectButton_Click);
selectButton.CausesValidation = false;
nameRowCell.Controls.Add(selectButton);
companyRow.Cells.Add(nameRowCell);
tblCompanies.Rows.Add(companyRow);
}
}
void selectButton_Click(object sender, EventArgs e) // <- Not getting handled
{
Button btn = (Button)sender;
string id = btn.CommandArgument;
if (id != "" && CompanyFound != null)
CompanyFound(new Company() { Id = int.Parse(id) });
}