private static void SetCalendarViewStyle(SPWeb web, SPView view, string defaultView)
{
SPLimitedWebPartManager vm =
web.GetFile(view.Url).GetLimitedWebPartManager(PersonalizationScope.Shared);
ListViewWebPart lv = null;
foreach (System.Web.UI.WebControls.WebParts.WebPart part in vm.WebParts)
{
if (part.GetType().ToString().ToLower() == "microsoft.sharepoint.webpartpages.listviewwebpart")
{
lv = part as ListViewWebPart;
break;
}
}
if (lv != null)
{
PropertyInfo ViewProp = lv.GetType().GetProperty("View", BindingFlags.NonPublic | BindingFlags.Instance);
SPView spView = ViewProp.GetValue(lv, null) as SPView;
PropertyInfo viewProp = spView.GetType().GetProperty("SchemaXml", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
string root = viewProp.GetValue(spView, null) as string;
XmlDocument doc = new XmlDocument();
doc.LoadXml(root);
XmlNode node = doc.SelectSingleNode("/View/CalendarViewStyles");
if (node == null)
{
XmlNode stylesNodes = doc.CreateElement("CalendarViewStyles");
stylesNodes.InnerXml = SetViewStyleNode(defaultView);
doc.DocumentElement.AppendChild(stylesNodes);
}
else
{
node.InnerXml = SetViewStyleNode(defaultView);
}
PropertyInfo NodeProp = spView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance);
XmlNode newNode = NodeProp.GetValue(spView, null) as XmlNode;
newNode.InnerXml = doc.DocumentElement.InnerXml;
spView.Update();
vm.SaveChanges(lv);
}
}
private static string SetViewStyleNode(string viewStyleTypeAsDefault)
{
System.Text.StringBuilder sbViewStyleXml = new System.Text.StringBuilder(16);
string[] viewStyleStr ={
"<CalendarViewStyle Title='Day' Type='day' Template='CalendarViewdayChrome' Sequence='1' Default='{0}' />",
"<CalendarViewStyle Title='Week' Type='week' Template='CalendarViewweekChrome' Sequence='2' Default='{0}' />",
"<CalendarViewStyle Title='Month' Type='month' Template='CalendarViewmonthChrome' Sequence='3' Default='{0}' />"
};
switch (viewStyleTypeAsDefault)
{
case "day":
viewStyleStr[0] = string.Format(viewStyleStr[0], "TRUE");
viewStyleStr[1] = string.Format(viewStyleStr[1], "FALSE");
viewStyleStr[2] = string.Format(viewStyleStr[2], "FALSE");
break;
case "week":
viewStyleStr[0] = string.Format(viewStyleStr[0], "FALSE");
viewStyleStr[1] = string.Format(viewStyleStr[1], "TRUE");
viewStyleStr[2] = string.Format(viewStyleStr[2], "FALSE");
break;
default: //this is for month view
viewStyleStr[0] = string.Format(viewStyleStr[0], "FALSE");
viewStyleStr[1] = string.Format(viewStyleStr[1], "FALSE");
viewStyleStr[2] = string.Format(viewStyleStr[2], "TRUE");
break;
}
foreach (string strStyle in viewStyleStr)
{
sbViewStyleXml.Append(strStyle);
}
return sbViewStyleXml.ToString();
}