public static void DeleteAllThenAddWebPartToPage(SPFile page, string wpXml, string wpZone) { using (SPLimitedWebPartManager wpMgr = page.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared)) { // Delete all web parts // Play the shell game because you can't delete from a collection in an enumerator List <WebPart> wpList = new List <WebPart>(); foreach (WebPart wp in wpMgr.WebParts) { wpList.Add(wp); } foreach (WebPart wp in wpList) { wpMgr.DeleteWebPart(wp); } // Add our new web part XmlDocument doc = new XmlDocument(); doc.LoadXml(wpXml); using (XmlNodeReader reader = new XmlNodeReader(doc)) { string errorMessage = null; System.Web.UI.WebControls.WebParts.WebPart wp = wpMgr.ImportWebPart(reader, out errorMessage); wpMgr.AddWebPart(wp, wpZone, wp.ZoneIndex); } } }
private static System.Web.UI.WebControls.WebParts.WebPart ResolveWebPartInstance(SPSite site, SPLimitedWebPartManager webPartManager, WebPartDefinition webpartModel) { System.Web.UI.WebControls.WebParts.WebPart webpartInstance = null; if (!string.IsNullOrEmpty(webpartModel.WebpartType)) { var webPartType = Type.GetType(webpartModel.WebpartType); webpartInstance = Activator.CreateInstance(webPartType) as System.Web.UI.WebControls.WebParts.WebPart; } else if (!string.IsNullOrEmpty(webpartModel.WebpartFileName)) { var webpartFileName = webpartModel.WebpartFileName; var rootWeb = site.RootWeb; // load definition from WP catalog var webpartCatalog = rootWeb.GetCatalog(SPListTemplateType.WebPartCatalog); var webpartItem = webpartCatalog.Items.OfType <SPListItem>().FirstOrDefault( i => string.Compare(i.Name, webpartFileName, true) == 0); if (webpartItem == null) { throw new ArgumentException(string.Format("webpartItem. Can't find web part file with name: {0}", webpartFileName)); } using (var streamReader = new MemoryStream(webpartItem.File.OpenBinary())) { using (var xmlReader = XmlReader.Create(streamReader)) { var errMessage = string.Empty; webpartInstance = webPartManager.ImportWebPart(xmlReader, out errMessage); if (!string.IsNullOrEmpty(errMessage)) { throw new ArgumentException( string.Format("Can't import web part foe with name: {0}. Error: {1}", webpartFileName, errMessage)); } } } } else if (!string.IsNullOrEmpty(webpartModel.WebpartXmlTemplate)) { var stringBytes = Encoding.UTF8.GetBytes(webpartModel.WebpartXmlTemplate); using (var streamReader = new MemoryStream(stringBytes)) { using (var xmlReader = XmlReader.Create(streamReader)) { var errMessage = string.Empty; webpartInstance = webPartManager.ImportWebPart(xmlReader, out errMessage); if (!string.IsNullOrEmpty(errMessage)) { throw new ArgumentException( string.Format("Can't import web part for XML template: {0}. Error: {1}", webpartModel.WebpartXmlTemplate, errMessage)); } } } } else { throw new Exception("Either WebpartType or WebpartFileName or WebpartXmlTemplate needs to be defined."); } return(webpartInstance); }