我正在尝试动态创建LinkButtons并从服务器端更改他们的onclick事件,如下所示:
for (int i = 1; i <= pagenum; i++)
{
LinkButton pb = new LinkButton();
pb.Text=i.ToString();
pb.CommandArgument=i.ToString();
pb.ID = "PageLink" + i.ToString()+",";
pb.Click += new EventHandler(Method1);
pb.Visible = true;
PagesDiv.Controls.Add(pb);
}
public void Method1(object sender, EventArgs e, int pagenum)
{
PagesDiv.Visible = true;
TableDiv.Visible = true;
localhost.StorageService w = new localhost.StorageService();
DataTable dt = w.GetItemsByCategory(pagenum, categoryname.ToString());
.................................(alot of code here...)
}
但我的问题是我在“pb.Click + = new EventHandler(Method1);”上收到错误。 说:“'Method1'没有重载匹配委托'System.EventHandler'” 我似乎无法找到它为什么不起作用......
任何帮助都将非常感谢!!!
答案 0 :(得分:0)
您已为事件处理程序添加了额外的参数。所以它不匹配the Click
event handler on LinkButton
。看看你的:
public void Method1(object sender, EventArgs e, int pagenum)
看看它的期望:
public void Method1(object sender, EventArgs e)
因此,错误。我不确定在这种情况下你期望pagenum
如何被传递,因为它在处理程序赋值中没有提到:
pb.Click += new EventHandler(Method1);
可能还有一些其他技巧可以将一个参数传递给一个处理程序,但是一个总是对我有用并且看起来很简单的就是简单地将它包装在一个lambda函数中:
pb.Click += (sender, e) => Method1(sender, e, pagenum);
这会创建一个匿名方法,在捕获pagenum
的值后调用您的方法,无论调用代码中发生什么。