Edit: dopo aver riletto la tua domanda, ho avuto una pugnalata a lui sulla base del secondo link nel mio 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;
}
Si prega di notare, non testato, appena fatto questo ora.
Sotto per riferimento.
C'è una funzione comune denominata FindControlRecursive in cui è possibile percorrere l'albero dei controlli dalla pagina in basso per trovare un controllo con un ID specifico.
Ecco un'implementazione da 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;
}
È possibile utilizzare questo tipo:
var control = FindControlRecursive(MyPanel.Page,"controlId");
Si potrebbe anche combinare con questo: http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx per creare una versione più bello.
fonte
2012-04-15 21:57:58
Non è questo il modo sbagliato? L'OP ha chiesto la ricerca verso l'alto, ma questa è una ricerca al ribasso se non mi sbaglio. – ChrisWue
Sì, hai ragione, ma questo dovrebbe metterlo sulla giusta linea .. –
aggiornato con un'implementazione sperimentale. –