/// <summary>
        /// Check all webpart in the specified webpartpage
        /// </summary>
        /// <param name="CurrentFile"></param>
        protected void CrawlWebPartPage(SPFile CurrentFile)
        {
            using (SPWeb web = CurrentFile.ParentFolder.ParentWeb)
            {
                SPWebPartCollection parts = web.GetWebPartCollection(CurrentFile.Url, Storage.Shared);
                if (parts != null)
                {
                    //OnTrace("Start search " + CurrentFile.Url.ToString() + " webpart's page...", "");

                    for (int i = 0; i < parts.Count; i++)
                    {
                        using (WebPart wptWebPart = parts[i])
                        {
                            if (WebPartInWebPartList(wptWebPart))
                            {
                                string[] webPartNames     = wptWebPart.ToString().Split('.');
                                string   WebPartSmallName = webPartNames[webPartNames.Length - 1].ToString();

                                OnTrace("Start search webpart " + WebPartSmallName, "");

                                try
                                {
                                    PropertyInfo[] pinProperties = wptWebPart.GetType().GetProperties(
                                        BindingFlags.Public | BindingFlags.Instance);

                                    try
                                    {
                                        foreach (PropertyInfo p in pinProperties)
                                        {
                                            if (FindReplaceWebPartProperty(wptWebPart, p))
                                            {
                                                parts.SaveChanges(wptWebPart.StorageKey);
                                            }
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        string sre = ex.Message;
                                    }
                                }
                                catch (Exception ex)
                                {
                                    string s = ex.Message;
                                }

                                OnTrace("Finish search webpart " + WebPartSmallName, "");
                            }
                            GC.Collect();
                            GC.WaitForPendingFinalizers();
                        }
                    }
                }

                GC.Collect();
                GC.WaitForPendingFinalizers();
            }

            //OnTrace("Finish search " + CurrentFile.Url.ToString() + " webpart's page...", "");
        }
 public void PersistProperties()
 {
     try
     {
         SPWeb  web  = ForumApplication.Instance.SpWeb;
         SPFile file = web.GetFile(this.Context.Request.Path);
         SPWebPartCollection webPartCollection = file.GetWebPartCollection(Storage.Shared);
         web.AllowUnsafeUpdates = true;
         //this.SaveProperties = true;
         webPartCollection.SaveChanges(this.StorageKey);
     }
     catch (Exception ex)
     {
         AddError(ex);
     }
 }