While working in SharepPoint I needed, from an UserControl in my WebPart, find a control in the page. Of course, I tried, different level at which to apply the FindControl(). The first thing I tried was this.Parent.Page.FindControl(“controlID”). That didn’t work. Then I tried different permutations. Finally I gave up with the FindControl and decided that I would do it the old fashion way. I’ll walk the tree. Here is some sample code how to do that.
Control PViewer = null;
foreach (Control Ctrl in this.Parent.Page.Controls)
{
PViewer = FindMyControl(Ctrl,”MyControlID”);
if (PViewer != null)
{
break;
}
}
private Control FindMyControl (Control ctrl, string controlID)
{
Control Ret = null;
foreach (Control Ctrl in ctrl.Controls)
{
if (Ctrl.ID != null && Ctrl.ID.ToLower() == controlID.ToLower())
{
Ret = Ctrl;
break;
}
else
{
Ret = FindMyControl (Ctrl,controlID);
if (Ret != null)
{
break;
}
}
}
return Ret;
}
Of course if you examine the code you will notice that I’m walking the tree recursively calling the FindMyControl method over and over again until I find the control I’m looking for.
Don’t forget the test for null in the if (Ctrl.ID != null && Ctrl.ID.ToLower() == controlID.ToLower()) statement. Of course make sure the test for null comes first. J