正如其他人說,正確的做法是通過編程實現這一點,而不是編輯內容數據庫,這將使您的安裝不受支持。我經常使用控制檯應用程序在由網站模板創建的網站組成的網站集中執行此操作。
以下是更改ListViewWebPart的Title屬性的示例。已更新以包含遞歸循環的代碼。我沒有測試過,但它應該可以工作。
private static void ProcessSiteCollection(string url)
{
using (SPSite siteCollection = new SPSite(url))
{
SPWeb rootWeb = siteCollection.RootWeb;
ProcessWebs(rootWeb);
}
}
private static void ProcessWebs(SPWeb parentWeb)
{
foreach (SPWeb web in parentWeb.Webs)
{
try
{
UpdateWebPart(web); // Set web part properties
ProcessWebs(web); // Recursively loop through children
}
finally
{
web.Dispose();
}
}
}
private static void UpdateWebPart(SPWeb web)
{
using (SPLimitedWebPartManager webPartManager =
web.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared))
{
try
{
foreach (WebPart webPart in webPartManager.WebParts)
{
if (webPart.Title == "My Web Part")
{
ListViewWebPart listViewWebPart = (ListViewWebPart)webPart;
listViewWebPart.Title = "Updated Web Part";
webPartManager.SaveChanges(listViewWebPart);
web.Update();
break;
}
}
}
finally
{
webPartManager.Web.Dispose();
}
}
}
這是否適用於我剛添加的場景。所有網站都是從模板創建的。 Sharepoint是否有辦法列舉這些網站,併爲每個網站獲取一個webpart實例? – epitka 2009-08-13 12:44:23
正如我在答覆的第一個版本中所提到的,是的,這是可以做到的,但我省略了它來保持簡短。我現在用一個完整的代碼示例更新了答案。 – 2009-08-13 13:40:01
我們需要在webpart管理器中部署web嗎? – Evgeny 2012-05-25 07:22:48