asp.net dinámicamente botón con controlador de eventos

Aquí tengo un pequeño problema con los botones generados dinámicamente y su controlador de eventos en asp.net. Genero una tabla flexible con botones adicionales para usuarios especiales. Los botones se generarán dinámicamente, lo que funciona bien. Pero no puedo hacer que funcione el controlador de eventos.

Aquí hay algunas piezas de mi código: Build the button (En una función propia).

… 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); … 

Y

 void test(object sender, EventArgs e) { // Do some stuff } 

Mi Page_Load está vacío.

Pero el progtwig no saltará a prueba, si hago clic en el botón. ¿Qué está mal?

¡¡¡Editar!!! El problema es que al principio no sé cuántas filas recibo de mi consulta SQL. Para cada fila agregaré un botón para eliminar y otro para cambiar. Llamo a mi progtwig un método que construye el resultado como una tabla. En este método, compruebo si el usuario actual es un Usuario administrador y, si lo está, llamaré a la función buildAdminButtons. Aquí, creo los botones en una nueva columna, para cada fila. ¿Cómo podría obtener esto en 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); } 

Agrego a cada botón una identificación única, que no sé desde el principio. ¿Cómo podría manejar esto?

Debe tener que colocar ese código en el evento page_load o page_init .

 protected void Page_Load() { 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); } 

Lea el artículo de MSDN: Cómo agregar controles a una página web de ASP.NET mediante progtwigción.