this may help.
                        
                        
                        
                            public static class ControlExtensions
                        
                            {
                        
                                /// <summary>
                        
                                /// recursively finds a child control of the specified parent.
                        
                                /// </summary>
                        
                                /// <param name="control"></param>
                        
                                /// <param name="id"></param>
                        
                                /// <returns></returns>
                        
                                public static Control FindControlRecursive(this Control control, string id)
                        
                                {
                        
                                    if (control == null) return null;
                        
                                     //try to find the control at the current level
                        
                                    Control ctrl = control.FindControl(id);
                        
                        
                        
                                    if (ctrl == null)
                        
                                    {
                        
                                        //search the children
                        
                                        foreach (Control child in control.Controls)
                        
                                        {
                        
                                            ctrl = FindControlRecursive(child, id);
                        
                        
                        
                                            if (ctrl != null) break;
                        
                                        }
                        
                                    }
                        
                                    return ctrl;
                        
                                }
                        
                            }
                        
                        
                        
                                public void Page_Load(object sender, EventArgs e)
                        
                                {
                        
                                    //call the recursive FindControl method
                        
                                    Control ctrl = this.FindControlRecursive("my_control_id");
                        
                                }
                        
                
             
            
                
                    
                        [This][1] article describes how to find control recursively by type, but the it implementation contains one flaw that leads to losing the "founded" control  
                        
                        
                        
                        Below is presented the fixed version:  
                        
                        
                        
                                    /// <summary>
                        
                                    /// Find control (recursively) by type 
                        
                                    /// (http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx)
                        
                                    /// </summary>
                        
                                    /// <typeparam name="T"></typeparam>
                        
                                    /// <param name="controls"></param>
                        
                                    /// <returns></returns>
                        
                                    public static T FindControl<T>(System.Web.UI.ControlCollection controls) where T : class
                        
                                    {
                        
                                        T found = default(T);
                        
                            
                        
                                        if (controls != null && controls.Count > 0)
                        
                                        {
                        
                                            for (int i = 0; i < controls.Count; i++)
                        
                                            {
                        
                                                if (found != null) break;
                        
                                                if (controls[i] is T)
                        
                                                {
                        
                                                    found = controls[i] as T;
                        
                                                    break;
                        
                                                }
                        
                                                found = FindControl<T>(controls[i].Controls);
                        
                                            }
                        
                                        }
                        
                            
                        
                                        return found;
                        
                                    }
                        
                        
                        
                        
                        
                          [1]: http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx