Editar: después de releer su pregunta, yo tenía una puñalada en ella basado en el segundo eslabón de mi post:
public static T FindControl<T>(System.Web.UI.Control Control) where T : class
{
T found = default(T);
if (Control != null && Control.Parent != null)
{
if(Control.Parent is T)
found = Control.Parent;
else
found = FindControl<T>(Control.Parent);
}
return found;
}
Tenga en cuenta, no probado, esto lo ha hecho hasta ahora.
A continuación para referencia.
Hay una función común llamada FindControlRecursive donde puede recorrer el árbol de control desde la página hacia abajo para encontrar un control con una ID específica.
Aquí es una implementación de http://dotnetslackers.com/Community/forums/find-control-recursive/p/2708/29464.aspx
private Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}
Usted podría utilizar esto como:
var control = FindControlRecursive(MyPanel.Page,"controlId");
También puede combinarlo con esto: http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx para crear una versión más agradable.
No es éste al revés? El OP pidió una búsqueda hacia arriba, pero esta es una búsqueda hacia abajo si no me equivoco. – ChrisWue
Sí, tienes razón, pero esto debería ponerlo en las líneas correctas. –
actualizado con una implementación experimental. –