Изменение события LinkButton Onclick

Я пытаюсь создать 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'" Я не могу понять, почему он не работает...

Любая помощь будет принята с благодарностью!!!

1 ответ

Вы добавили дополнительный параметр в ваш обработчик событий. Так что это не соответствует Click обработчик событий включенLinkButton, Посмотри на свои:

public void Method1(object sender, EventArgs e, int pagenum)

И посмотрите, что он ожидает:

public void Method1(object sender, EventArgs e)

Отсюда и ошибка. Я не уверен, как вы ожидаете pagenum в любом случае, в этом случае, так как это не упомянуто в назначении обработчика:

pb.Click += new EventHandler(Method1);

Могут быть некоторые другие приемы, чтобы передать аргумент обработчику, но тот, который всегда работал для меня и кажется довольно простым, состоит в том, чтобы просто обернуть его в лямбда-функцию:

pb.Click += (sender, e) => Method1(sender, e, pagenum);

Это создает анонимный метод, который просто вызывает ваш метод после захвата значения pagenumчто бы ни случилось в коде вызова.

Другие вопросы по тегам