Localizar controles asp.net de forma recursiva.
Você que utiliza bastante o método FindControl e se depara as vezes com um NULL.
Utilize este método para localizar controles dentro de outros controles de forma rápida e eficiente.
public class ControlFinder
{
public static T FindControl<T>(Control startingControl, string id) where T : Control
{
var found = startingControl.FindControl(id) as T ?? FindChildControl<T>(startingControl, id);
return found;
}
public static T FindChildControl<T>(Control startingControl, string id) where T : Control
{
T found = null; foreach (Control activeControl in startingControl.Controls)
{
found = activeControl as T;
if (found == null || (string.Compare(id, found.ID, true) != 0))
{
found = FindChildControl<T>(activeControl, id);
} if (found != null)
{
break;
}
} return found;
}
}
Para utilização basta:
var meuControleLocalizado = ControlFinder.FindControl<TextBox>(_meuFormView, "idDoTextBox");
Onde:
meuControleLocalizado = vai ser do tipo definido em <TextBox>;
_meuFormView = deve ser o ID do controle Container (pai) que tem o outro controle dentro;
idDoTextBox = deve ser o ID do controle que esta dentro do controle Container;
Espero que seja útil.
Até a próxima.