在循环中以编程方式添加带有事件的控件
本文关键字:事件 控件 添加 方式 循环 编程 | 更新日期: 2023-09-27 17:56:10
我在以编程方式在控件循环中具有事件的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();
}
}
当我在accompanies
中有 2 个或更多值时,((LinkButton)sender).CommandArgument
的返回始终是循环中的最后一个,即使我在((LinkButton)sender).CommandArgument
的每次迭代中都特意放置了不同的值。为什么会这样?
我的代码是C# 4.0,ASP.NET,在VS2010 Pro中构建。
请帮忙。提前谢谢。
您尚未为 btnRemovePatient 分配 ID 值,因此当您单击此按钮时,事件不知道哪个控件引发了此事件,因为所有控件都具有相同的属性。请尝试为所有控件添加 ID 值。