Panel
コントロールがループ内にイベントを持っている場合、プログラムでコントロールを追加するのに問題があります。これが私のコードです:
pnlAccompanies.Controls.Clear();
foreach (var accompany in this.RetrieveAccompanyList())
{
var btnRemoveAccompany = new LinkButton();
btnRemoveAccompany.CommandArgument = accompany.AccompanyID.ToString();
btnRemoveAccompany.CssClass = "close";
btnRemoveAccompany.Controls.Add(new Literal() { Text = "×" });
btnRemoveAccompany.Click += this.btnRemoveAccompany_Click;
smGTPForm.RegisterAsyncPostBackControl(btnRemoveAccompany);
pnlAccompanies.Controls.Add(btnRemoveAccompany);
}
そして、これが私のイベントのコードです:
protected void btnRemoveAccompany_Click(object sender, EventArgs e)
{
var accompanyID = ((LinkButton)sender).CommandArgument.Parser<int>();
var accompanies = this.RetrieveAccompanyList();
if (accompanies.Exists(o => o.AccompanyID == accompanyID))
{
accompanies.RemoveAll(o => o.AccompanyID == accompanyID);
HttpContext.Current.Session["gtpd_accompany01"] = accompanies;
this.PopulateAccompanyList();
}
}
に 2 つ以上の値があるaccompanies
場合、 の戻り値((LinkButton)sender).CommandArgument
は常にループの最後の値になります((LinkButton)sender).CommandArgument
。なぜこのようになっているのですか?
私のコードは C# 4.0、ASP.NET、VS2010 Pro でビルドされています。
助けてください。前もって感謝します。