public override void ExtractWebPartPersonalization(WebPart webPart)
        {
            base.ValidateWebPart(webPart);
            ProxyWebPart part = webPart as ProxyWebPart;

            if (part != null)
            {
                this.RoundTripWebPartPersonalization(part.OriginalID, part.GenericWebPartID);
            }
            else
            {
                System.Web.UI.WebControls.WebParts.PersonalizationScope personalizationScope = this.PersonalizationScope;
                if ((personalizationScope == System.Web.UI.WebControls.WebParts.PersonalizationScope.User) && !webPart.IsShared)
                {
                    personalizationScope = System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared;
                }
                bool   isStatic          = webPart.IsStatic;
                string personalizationID = this.CreatePersonalizationID(webPart, null);
                this.ExtractPersonalization(webPart, personalizationID, false, personalizationScope, isStatic, null);
                GenericWebPart associatedGenericWebPart = webPart as GenericWebPart;
                if (associatedGenericWebPart != null)
                {
                    Control childControl = associatedGenericWebPart.ChildControl;
                    personalizationID = this.CreatePersonalizationID(childControl, associatedGenericWebPart);
                    this.ExtractPersonalization(childControl, personalizationID, false, personalizationScope, isStatic, associatedGenericWebPart);
                }
            }
        }
 public WebPart this[string id]
 {
     get
     {
         foreach (WebPart part in base.InnerList)
         {
             if (string.Equals(part.ID, id, StringComparison.OrdinalIgnoreCase))
             {
                 return(part);
             }
             GenericWebPart part2 = part as GenericWebPart;
             if (part2 != null)
             {
                 Control childControl = part2.ChildControl;
                 if ((childControl != null) && string.Equals(childControl.ID, id, StringComparison.OrdinalIgnoreCase))
                 {
                     return(part2);
                 }
             }
             ProxyWebPart part3 = part as ProxyWebPart;
             if ((part3 != null) && (string.Equals(part3.OriginalID, id, StringComparison.OrdinalIgnoreCase) || string.Equals(part3.GenericWebPartID, id, StringComparison.OrdinalIgnoreCase)))
             {
                 return(part3);
             }
         }
         return(null);
     }
 }
        /// <devdoc>
        /// Returns the WebPart with the specified id, or the GenericWebPart containing a control with
        /// the specified id, or the ProxyWebPart with OriginalID or GenericWebPartID equal to the
        /// specified id, performing a case-insensitive comparison.  Returns null if there are no matches.
        /// </devdoc>
        public WebPart this[string id] {
            // PERF: Use a hashtable for lookup, instead of a linear search
            get {
                foreach (WebPart webPart in InnerList)
                {
                    if (String.Equals(webPart.ID, id, StringComparison.OrdinalIgnoreCase))
                    {
                        return(webPart);
                    }

                    GenericWebPart genericWebPart = webPart as GenericWebPart;
                    if (genericWebPart != null)
                    {
                        Control control = genericWebPart.ChildControl;
                        if (control != null)
                        {
                            if (String.Equals(control.ID, id, StringComparison.OrdinalIgnoreCase))
                            {
                                return(genericWebPart);
                            }
                        }
                    }

                    ProxyWebPart proxyWebPart = webPart as ProxyWebPart;
                    if (proxyWebPart != null)
                    {
                        if ((String.Equals(proxyWebPart.OriginalID, id, StringComparison.OrdinalIgnoreCase)) ||
                            (String.Equals(proxyWebPart.GenericWebPartID, id, StringComparison.OrdinalIgnoreCase)))
                        {
                            return(proxyWebPart);
                        }
                    }
                }

                return(null);
            }
        }