I want to create several webpart pages (programmatically) with custom web parts in it. I have searched the internetz but couldn\'t find anything that I could get to work.
<OK, did a little digging... here is my solution.
using(SPSite site = new SPSite("http://my.dev.com"))
{
using(SPWeb web = site.OpenWeb())
{
SPFile page = web.GetFile("SitePages/Welcome.aspx");
using(SPLimitedWebPartManager manager = page.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
string errMsg = string.Empty;
SPFile myWebPart = web.GetFile("_catalogs/wp/myWebPart.webpart");
XmlTextReader read = newXmlReader(myWebPart.OpenBinaryStream());
var wp = manager.ImportWebPart(read, out errMsg);
manager.AddWebPart(wp, "<Webpart Zone>", 1);
manager.SaveChanges(wp);
}
}
}
You can add webparts by using the SPLimitedWebPartManager
and your webPart defininition URL. This example should get you started:
XmlTextReader reader = new XmlTextReader(new StringReader(web.GetFileAsString(<Url to your .webpart file here>)));
SPLimitedWebPartManager wpm = web.GetLimitedWebPartManager(<URL to your page>, Syste.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
WebPart wp = (WebPart) wpm.ImportWebPart(reader, out errMsg);
wp.Title = "My Title for this webpart";
wpm.AddWebPart(wp, <Name of WebpartZone here, e.g. "Header">, <Zone Index here>);
wpm.SaveChanges(wp);
After you fill in the blanks this code will put a WebPart on your publishing page. In the end the most important functions are SPLimitedWebPartManager.ImportWebPart
and SPLimitedWebPartManager.AddWebPart
as you instantiate the WebPart manager for the publishing page.