У меня небольшая проблема с динамически генерируемыми кнопками и их обработчиком событий в asp.net. Я создаю гибкую таблицу с дополнительными кнопками для специальных пользователей. Кнопки будут генерироваться динамически, что отлично работает. Но я не могу заставить работать обработчик событий.
Вот несколько фрагментов моего кода: Создайте кнопку (в собственной функции).
…
Button ButtonChange = new Button();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click += new EventHandler(test);
…
И
void test(object sender, EventArgs e)
{
// Do some stuff
}
Моя Page_Load
пуста.
Но программа не перейдет к тестированию, если я нажму кнопку. Что не так?
Редактировать !!! Проблема в том, что при запуске я не знаю, сколько строк я получаю из своего SQL-запроса. Для каждой строки я добавлю кнопки удаления и изменения. Я вызываю в своей программе метод, который строит результат в виде таблицы. В этом методе я проверяю, является ли текущий пользователь пользователем AdminUser, и если он есть, я вызову функцию buildAdminButtons. Здесь я создаю кнопки в новом столбце для каждой строки. Как я могу получить это в OnLoad?
private void buildAdminButtons(TableRow tempRow, int i)
{
Button ButtonDelete = new Button();
Button ButtonChange = new Button();
TableCell change = new TableCell();
TableCell delete = new TableCell();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" + i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonDelete.Text = "Delete";
ButtonDelete.ID = "delete_" + i.ToString();
ButtonDelete.Font.Size = FontUnit.Point(7);
ButtonDelete.ControlStyle.CssClass = "button";
change.Controls.Add(ButtonChange);
delete.Controls.Add(ButtonDelete);
tempRow.Cells.Add(change);
tempRow.Cells.Add(delete);
}
Я добавляю каждой кнопке уникальный идентификатор, которого я не знаю в начале. Как я могу справиться с этим?