1

我正在尝试动态创建 LinkBut​​tons 并从服务器端更改其 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'”我似乎无法找到它为什么不起作用......

任何帮助将不胜感激!!!

4

1 回答 1

0

您已向事件处理程序添加了一个额外的参数。所以ClickLinkButton. 看看你的:

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,无论调用代码中发生了什么。

于 2014-03-11T17:28:49.403 回答