Monday, February 4, 2013

SharePoint 2010 change the default view scope of Calendar View

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();                       
        }

No comments:

Post a Comment