Es muy típico tener que generar controles dinámicamente en una página ASP.NET. El proceso de creación de controles dinámicamente es muy simple aunque nos puede llevar por el camino de la amargura sino tenemos algunos conceptos claros. Como punto de partida vamos a empezar con este código
protected void Page_Load(object sender, EventArgs e) {
for (int i = 0; i < 5; i++)
{
DropDownList dropDownList = new DropDownList();
dropDownList.ID = string.Format("dropDownList{0}", i);
dropDownList.Items.Add("--");
dropDownList.Items.Add(i.ToString());
form1.Controls.Add(dropDownList);
}
}
Como vemos el código es simple. Creamos 5 DropDownList, le añadimos 2 elementos, y los añadimos al form1 de nuestra página aspx. El resultado es el siguiente:

Ahora bien, está es la forma correcta de realizar este proceso. Si estudiamos un poco el ciclo de vida de las páginas aspx de .net (http://msdn2.microsoft.com/en-US/library/ms178472.aspx) vemos que el sitio correcto para crear nuestros controles dinámicamente es en evento PreInit. Una vez que sabemos estos cambiamos nuestro código por el siguiente:
protected override void OnInit(EventArgs e) {
for (int i = 0; i < 5; i++)
{
DropDownList dropDownList = new DropDownList();
dropDownList.ID = string.Format("dropDownList{0}", i);
dropDownList.Items.Add("--");
dropDownList.Items.Add(i.ToString());
form1.Controls.Add(dropDownList);
}
base.OnInit(e);
}
Con seguiremos los consejos de Microsoft y seguro que tarde o tempranos nos ahorraremos auténticos quebraderos de cabeza. Una cosa lógica sería querer actuar sobre el evento SelectedIndex de los DropDownList para actualizar algo. Bien para esto sólo tenemos que modificar nuestro código un poco y añadir estas líneas al proceso de creación de los controles
dropDownList.AutoPostBack = true;
dropDownList.SelectedIndexChanged += new EventHandler(dropDownList_SelectedIndexChanged);
El método para manejar el evento sería el siguiente
void dropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dropDownList = (DropDownList)sender;
}
Así tenemos en dropDownList el control que ha lanzado el evento. Próximamente veremos cómo realizar este proceso pero con controles de usuario y no con lo genéricos de .NET. El proceso en esencia es el mismo, pero habrá que usar el ViewState.