示例#1
0
		/// <summary>
		/// Set the date group.
		/// </summary>
		/// <param name="groupBy">How to group the fields.</param>
		/// <param name="startDate">The start date.</param>
		/// <param name="endDate">The end date.</param>
		/// <param name="interval">The interval of the grouping.</param>
		/// <returns>The new field data group.</returns>
		internal ExcelPivotTableFieldDateGroup SetDateGroup(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, int interval)
		{
			ExcelPivotTableFieldDateGroup group;
			group = new ExcelPivotTableFieldDateGroup(this.NameSpaceManager, myCacheFieldHelper.TopNode);
			myCacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsDate", true);
			myCacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsNonDate", false);
			myCacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsSemiMixedTypes", false);

			group.TopNode.InnerXml += string.Format("<fieldGroup base=\"{0}\"><rangePr groupBy=\"{1}\" /><groupItems /></fieldGroup>", this.BaseIndex, groupBy.ToString().ToLower(CultureInfo.InvariantCulture));

			if (startDate.Year < 1900)
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", "1900-01-01T00:00:00");
			else
			{
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", startDate.ToString("s", CultureInfo.InvariantCulture));
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@autoStart", "0");
			}

			if (endDate == DateTime.MaxValue)
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", "9999-12-31T00:00:00");
			else
			{
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", endDate.ToString("s", CultureInfo.InvariantCulture));
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@autoEnd", "0");
			}

			int items = AddDateGroupItems(group, groupBy, startDate, endDate, interval);
			this.AddFieldItems(items);

			myGrouping = group;
			return group;
		}
示例#2
0
		private ExcelPivotTableField AddField(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, ref bool firstField, int interval)
		{
			if (firstField == false)
			{
				//Pivot field
				var topNode = myTable.PivotTableXml.SelectSingleNode("//d:pivotFields", myTable.NameSpaceManager);
				var fieldNode = myTable.PivotTableXml.CreateElement("pivotField", ExcelPackage.schemaMain);
				fieldNode.SetAttribute("compact", "0");
				fieldNode.SetAttribute("outline", "0");
				fieldNode.SetAttribute("showAll", "0");
				fieldNode.SetAttribute("defaultSubtotal", "0");
				topNode.AppendChild(fieldNode);

				var field = new ExcelPivotTableField(myTable.NameSpaceManager, fieldNode, myTable, myTable.Fields.Count, this.Index);
				field.DateGrouping = groupBy;

				XmlNode rowColFields;
				if (this.IsRowField)
					rowColFields = this.TopNode.SelectSingleNode("../../d:rowFields", this.NameSpaceManager);
				else
					rowColFields = this.TopNode.SelectSingleNode("../../d:colFields", this.NameSpaceManager);

				int index = 0;
				foreach (XmlElement rowfield in rowColFields.ChildNodes)
				{
					if (int.TryParse(rowfield.GetAttribute("x"), out var fieldIndex))
					{
						if (myTable.Fields[fieldIndex].BaseIndex == this.BaseIndex)
						{
							var newElement = rowColFields.OwnerDocument.CreateElement("field", ExcelPackage.schemaMain);
							newElement.SetAttribute("x", field.Index.ToString());
							rowColFields.InsertBefore(newElement, rowfield);
							break;
						}
					}
					index++;
				}

				if (this.IsRowField)
					myTable.RowFields.Insert(field, index);
				else
					myTable.ColumnFields.Insert(field, index);

				myTable.Fields.Add(field);

				this.AddCacheField(field, startDate, endDate, interval);
				return field;
			}
			else
			{
				firstField = false;
				this.DateGrouping = groupBy;
				this.Compact = false;
				SetDateGroup(groupBy, startDate, endDate, interval);
				return this;
			}
		}
示例#3
0
        private ExcelPivotTableField AddField(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, ref bool firstField, int interval)
        {
            if (firstField == false)
            {
                ExcelPivotTableField field = _pivotTable.Fields.AddDateGroupField(Index);

                XmlNode rowColFields;
                if (IsRowField)
                {
                    rowColFields = TopNode.SelectSingleNode("../../d:rowFields", NameSpaceManager);
                }
                else
                {
                    rowColFields = TopNode.SelectSingleNode("../../d:colFields", NameSpaceManager);
                }

                var index = 0;
                foreach (XmlElement rowfield in rowColFields.ChildNodes)
                {
                    if (int.TryParse(rowfield.GetAttribute("x"), out int fieldIndex))
                    {
                        if (_pivotTable.Fields[fieldIndex].BaseIndex == BaseIndex)
                        {
                            var newElement = rowColFields.OwnerDocument.CreateElement("field", ExcelPackage.schemaMain);
                            newElement.SetAttribute("x", field.Index.ToString());
                            rowColFields.InsertBefore(newElement, rowfield);
                            break;
                        }
                    }
                    index++;
                }

                var cacheRef = _pivotTable.CacheDefinition._cacheReference;
                field._cacheField = cacheRef.AddDateGroupField(field, groupBy, startDate, endDate, interval);
                UpdatePivotTableGroupItems(field, cacheRef, false);

                if (IsRowField)
                {
                    _pivotTable.RowFields.Insert(field, index);
                }
                else
                {
                    _pivotTable.ColumnFields.Insert(field, index);
                }

                return(field);
            }
            else
            {
                firstField = false;
                Compact    = false;
                _cacheField.SetDateGroup(this, groupBy, startDate, endDate, interval);
                UpdatePivotTableGroupItems(this, _pivotTable.CacheDefinition._cacheReference, true);
                return(this);
            }
        }
示例#4
0
 /// <summary>
 /// Returns the date group field.
 /// </summary>
 /// <param name="GroupBy">The type of grouping</param>
 /// <returns>The matching field. If none is found null is returned</returns>
 public ExcelPivotTableField GetDateGroupField(eDateGroupBy GroupBy)
 {
     foreach (var fld in _list)
     {
         if (fld.Grouping is ExcelPivotTableFieldDateGroup && (((ExcelPivotTableFieldDateGroup)fld.Grouping).GroupBy) == GroupBy)
         {
             return(fld);
         }
     }
     return(null);
 }
 /// <summary>
 /// Returns the date group field.
 /// </summary>
 /// <param name="groupBy">The type of grouping.</param>
 /// <returns>The matching field or null if none is found.</returns>
 public ExcelPivotTableField GetDateGroupField(eDateGroupBy groupBy)
 {
     foreach (var field in this)
     {
         if (field.Grouping is ExcelPivotTableFieldDateGroup && (((ExcelPivotTableFieldDateGroup)field.Grouping).GroupBy) == groupBy)
         {
             return(field);
         }
     }
     return(null);
 }
示例#6
0
		/// <summary>
		/// Set the cache field node.
		/// </summary>
		/// <param name="cacheField">The cache field node being set.</param>
		internal void SetCacheFieldNode(XmlNode cacheField)
		{
			myCacheFieldHelper = new XmlHelperInstance(this.NameSpaceManager, cacheField);
			var groupNode = cacheField.SelectSingleNode("d:fieldGroup", this.NameSpaceManager);
			if (groupNode != null)
			{
				var groupBy = groupNode.SelectSingleNode("d:rangePr/@groupBy", this.NameSpaceManager);
				if (groupBy == null)
					myGrouping = new ExcelPivotTableFieldNumericGroup(this.NameSpaceManager, cacheField);
				else
				{
					this.DateGrouping = (eDateGroupBy)Enum.Parse(typeof(eDateGroupBy), groupBy.Value, true);
					myGrouping = new ExcelPivotTableFieldDateGroup(this.NameSpaceManager, groupNode);
				}
			}
		}
示例#7
0
		private void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, int groupInterval)
		{
			if (groupInterval < 1 || groupInterval >= Int16.MaxValue)
				throw (new ArgumentOutOfRangeException("Group interval is out of range"));
			if (groupInterval > 1 && groupBy != eDateGroupBy.Days)
				throw (new ArgumentException("Group interval is can only be used when groupBy is Days"));

			this.ValidateGrouping();

			bool firstField = true;
			List<ExcelPivotTableField> fields = new List<ExcelPivotTableField>();
			//Seconds
			if ((groupBy & eDateGroupBy.Seconds) == eDateGroupBy.Seconds)
				fields.Add(this.AddField(eDateGroupBy.Seconds, startDate, endDate, ref firstField));
			//Minutes
			if ((groupBy & eDateGroupBy.Minutes) == eDateGroupBy.Minutes)
				fields.Add(this.AddField(eDateGroupBy.Minutes, startDate, endDate, ref firstField));
			//Hours
			if ((groupBy & eDateGroupBy.Hours) == eDateGroupBy.Hours)
				fields.Add(this.AddField(eDateGroupBy.Hours, startDate, endDate, ref firstField));
			//Days
			if ((groupBy & eDateGroupBy.Days) == eDateGroupBy.Days)
				fields.Add(this.AddField(eDateGroupBy.Days, startDate, endDate, ref firstField, groupInterval));
			//Month
			if ((groupBy & eDateGroupBy.Months) == eDateGroupBy.Months)
				fields.Add(this.AddField(eDateGroupBy.Months, startDate, endDate, ref firstField));
			//Quarters
			if ((groupBy & eDateGroupBy.Quarters) == eDateGroupBy.Quarters)
				fields.Add(this.AddField(eDateGroupBy.Quarters, startDate, endDate, ref firstField));
			//Years
			if ((groupBy & eDateGroupBy.Years) == eDateGroupBy.Years)
				fields.Add(this.AddField(eDateGroupBy.Years, startDate, endDate, ref firstField));

			if (fields.Count > 1)
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/@par", (myTable.Fields.Count - 1).ToString());
			if (groupInterval != 1)
				myCacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@groupInterval", groupInterval.ToString());
			else
				myCacheFieldHelper.DeleteNode("d:fieldGroup/d:rangePr/@groupInterval");
			myItems = null;
		}
示例#8
0
        internal ExcelPivotTableFieldDateGroup SetDateGroup(ExcelPivotTableField field, eDateGroupBy groupBy, DateTime StartDate, DateTime EndDate, int interval)
        {
            ExcelPivotTableFieldDateGroup group;

            group = new ExcelPivotTableFieldDateGroup(NameSpaceManager, TopNode);
            SetXmlNodeBool("d:sharedItems/@containsDate", true);
            SetXmlNodeBool("d:sharedItems/@containsNonDate", false);
            SetXmlNodeBool("d:sharedItems/@containsSemiMixedTypes", false);

            group.TopNode.InnerXml += string.Format("<fieldGroup base=\"{0}\"><rangePr groupBy=\"{1}\" /><groupItems /></fieldGroup>", field.BaseIndex, groupBy.ToString().ToLower(CultureInfo.InvariantCulture));

            if (StartDate.Year < 1900)
            {
                SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", "1900-01-01T00:00:00");
            }
            else
            {
                SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", StartDate.ToString("s", CultureInfo.InvariantCulture));
                SetXmlNodeString("d:fieldGroup/d:rangePr/@autoStart", "0");
            }

            if (EndDate == DateTime.MaxValue)
            {
                SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", "9999-12-31T00:00:00");
            }
            else
            {
                SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", EndDate.ToString("s", CultureInfo.InvariantCulture));
                SetXmlNodeString("d:fieldGroup/d:rangePr/@autoEnd", "0");
            }

            int items = AddDateGroupItems(group, groupBy, StartDate, EndDate, interval);

            Grouping     = group;
            DateGrouping = groupBy;
            return(group);
        }
        private int AddDateGroupItems(ExcelPivotTableFieldGroup group, eDateGroupBy GroupBy, DateTime StartDate, DateTime EndDate)
        {
            XmlElement groupItems = group.TopNode.SelectSingleNode("d:fieldGroup/d:groupItems", group.NameSpaceManager) as XmlElement;
            int items = 2;
            //First date
            AddGroupItem(groupItems, "<" + StartDate.ToString("s", CultureInfo.InvariantCulture).Substring(0, 10));

            switch (GroupBy)
            {
                case eDateGroupBy.Seconds:
                case eDateGroupBy.Minutes:
                    AddTimeSerie(60, groupItems);
                    items += 60;
                    break;
                case eDateGroupBy.Hours:
                    AddTimeSerie(24, groupItems);
                    items += 24;
                    break;
                case eDateGroupBy.Days:
                    DateTime dt = new DateTime(2008, 1, 1); //pick a year with 366 days
                    while (dt.Year == 2008)
                    {
                        AddGroupItem(groupItems, dt.ToString("dd-MMM"));
                        dt = dt.AddDays(1);
                    }
                    items += 366;
                    break;
                case eDateGroupBy.Months:
                    AddGroupItem(groupItems, "jan");
                    AddGroupItem(groupItems, "feb");
                    AddGroupItem(groupItems, "mar");
                    AddGroupItem(groupItems, "apr");
                    AddGroupItem(groupItems, "may");
                    AddGroupItem(groupItems, "jun");
                    AddGroupItem(groupItems, "jul");
                    AddGroupItem(groupItems, "aug");
                    AddGroupItem(groupItems, "sep");
                    AddGroupItem(groupItems, "oct");
                    AddGroupItem(groupItems, "nov");
                    AddGroupItem(groupItems, "dec");
                    items += 12;
                    break;
                case eDateGroupBy.Quarters:
                    AddGroupItem(groupItems, "Qtr1");
                    AddGroupItem(groupItems, "Qtr2");
                    AddGroupItem(groupItems, "Qtr3");
                    AddGroupItem(groupItems, "Qtr4");
                    items += 4;
                    break;
                case eDateGroupBy.Years:
                    if(StartDate.Year>=1900 && EndDate!=DateTime.MaxValue)
                    {
                        for (int year = StartDate.Year; year <= EndDate.Year; year++)
                        {
                            AddGroupItem(groupItems, year.ToString());
                        }
                        items += EndDate.Year - StartDate.Year+1;
                    }
                    break;
                default:
                    throw (new Exception("unsupported grouping"));
            }

            //Lastdate
            AddGroupItem(groupItems, ">" + EndDate.ToString("s", CultureInfo.InvariantCulture).Substring(0, 10));
            return items;
        }
示例#10
0
        private ExcelPivotTableField AddField(eDateGroupBy groupBy,DateTime startDate, DateTime endDate,ref  bool firstField)
        {
            if (firstField == false)
            {
                //Pivot field
                var topNode = _table.PivotTableXml.SelectSingleNode("//d:pivotFields", _table.NameSpaceManager);
                var fieldNode = _table.PivotTableXml.CreateElement("pivotField", ExcelPackage.schemaMain);
                fieldNode.SetAttribute("compact", "0");
                fieldNode.SetAttribute("outline", "0");
                fieldNode.SetAttribute("showAll", "0");
                fieldNode.SetAttribute("defaultSubtotal", "0");
                topNode.AppendChild(fieldNode);

                var field = new ExcelPivotTableField(_table.NameSpaceManager, fieldNode, _table, _table.Fields.Count, Index);
                field.DateGrouping = groupBy;

                XmlNode rowColFields;
                if (IsRowField)
                {
                    rowColFields=TopNode.SelectSingleNode("../../d:rowFields", NameSpaceManager);
                }
                else
                {
                    rowColFields = TopNode.SelectSingleNode("../../d:colFields", NameSpaceManager);
                }

                int fieldIndex, index = 0;
                foreach (XmlElement rowfield in rowColFields.ChildNodes)
                {
                    if (int.TryParse(rowfield.GetAttribute("x"), out fieldIndex))
                    {
                        if (_table.Fields[fieldIndex].BaseIndex == BaseIndex)
                        {
                            var newElement = rowColFields.OwnerDocument.CreateElement("field", ExcelPackage.schemaMain);
                            newElement.SetAttribute("x", field.Index.ToString());
                            rowColFields.InsertBefore(newElement, rowfield);
                            break;
                        }
                    }
                    index++;
                }

                if (IsRowField)
                {
                    _table.RowFields.Insert(field, index);
                }
                else
                {
                    _table.ColumnFields.Insert(field, index);
                }

                _table.Fields.AddInternal(field);

                AddCacheField(field, startDate, endDate);
                return field;
            }
            else
            {
                firstField = false;
                DateGrouping = groupBy;
                Compact = false;
                SetDateGroup(groupBy, startDate, endDate);
                return this;
            }
        }
示例#11
0
 internal void SetCacheFieldNode(XmlNode cacheField)
 {
     _cacheFieldHelper = new XmlHelperInstance(NameSpaceManager, cacheField);
     var groupNode = cacheField.SelectSingleNode("d:fieldGroup", NameSpaceManager);
     if (groupNode!=null)
     {
         var groupBy = groupNode.SelectSingleNode("d:rangePr/@groupBy", NameSpaceManager);
         if (groupBy==null)
         {
             _grouping = new ExcelPivotTableFieldNumericGroup(NameSpaceManager, cacheField);
         }
         else
         {
             DateGrouping=(eDateGroupBy)Enum.Parse(typeof(eDateGroupBy), groupBy.Value, true);
             _grouping = new ExcelPivotTableFieldDateGroup(NameSpaceManager, groupNode);
         }
     }
 }
示例#12
0
        internal ExcelPivotTableFieldDateGroup SetDateGroup(eDateGroupBy GroupBy, DateTime StartDate, DateTime EndDate)
        {
            ExcelPivotTableFieldDateGroup group;
            group = new ExcelPivotTableFieldDateGroup(NameSpaceManager, _cacheFieldHelper.TopNode);
            _cacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsDate", true);
            _cacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsNonDate", false);
            _cacheFieldHelper.SetXmlNodeBool("d:sharedItems/@containsSemiMixedTypes", false);

            group.TopNode.InnerXml += string.Format("<fieldGroup base=\"{0}\"><rangePr groupBy=\"{1}\" /><groupItems /></fieldGroup>", BaseIndex, GroupBy.ToString().ToLower());

            if (StartDate.Year < 1900)
            {
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", "1900-01-01T00:00:00");
            }
            else
            {
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@startDate", StartDate.ToString("s", CultureInfo.InvariantCulture));
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@autoStart", "0");
            }

            if (EndDate==DateTime.MaxValue)
            {
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", "9999-12-31T00:00:00");
            }
            else
            {
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@endDate", EndDate.ToString("s", CultureInfo.InvariantCulture));
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@autoEnd", "0");
            }

            int items = AddDateGroupItems(group, GroupBy, StartDate, EndDate);
            AddFieldItems(items);

            _grouping = group;
            return group;
        }
示例#13
0
 /// <summary>
 /// Add a date grouping on this field.
 /// </summary>
 /// <param name="groupBy">Group by</param>
 public void AddDateGrouping(eDateGroupBy groupBy)
 {
     AddDateGrouping(groupBy, DateTime.MinValue, DateTime.MaxValue);
 }
示例#14
0
        /// <summary>
        /// Add a date grouping on this field.
        /// </summary>
        /// <param name="groupBy">Group by</param>
        /// <param name="startDate">Fixed start date. Use DateTime.MinValue for auto</param>
        /// <param name="endDate">Fixed end date. Use DateTime.MaxValue for auto</param>
        public void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate)
        {
            ValidateGrouping();

            bool firstField = true;
            List<ExcelPivotTableField> fields=new List<ExcelPivotTableField>();
            //Seconds
            if ((groupBy & eDateGroupBy.Seconds) == eDateGroupBy.Seconds)
            {
                fields.Add(AddField(eDateGroupBy.Seconds, startDate, endDate, ref firstField));
            }
            //Minutes
            if ((groupBy & eDateGroupBy.Minutes) == eDateGroupBy.Minutes)
            {
                fields.Add(AddField(eDateGroupBy.Minutes, startDate, endDate, ref firstField));
            }
            //Hours
            if ((groupBy & eDateGroupBy.Hours) == eDateGroupBy.Hours)
            {
                fields.Add(AddField(eDateGroupBy.Hours, startDate, endDate, ref firstField));
            }
            //Days
            if ((groupBy & eDateGroupBy.Days) == eDateGroupBy.Days)
            {
                fields.Add(AddField(eDateGroupBy.Days, startDate, endDate, ref firstField));
            }
            //Month
            if ((groupBy & eDateGroupBy.Months) == eDateGroupBy.Months)
            {
                fields.Add(AddField(eDateGroupBy.Months, startDate, endDate, ref firstField));
            }
            //Quarters
            if ((groupBy & eDateGroupBy.Quarters) == eDateGroupBy.Quarters)
            {
                fields.Add(AddField(eDateGroupBy.Quarters, startDate, endDate, ref firstField));
            }
            //Years
            if ((groupBy & eDateGroupBy.Years) == eDateGroupBy.Years)
            {
                fields.Add(AddField(eDateGroupBy.Years, startDate, endDate, ref firstField));
            }

            _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/@par", (_table.Fields.Count - 1).ToString());
            _items = null;
        }
示例#15
0
 private ExcelPivotTableField AddField(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, ref bool firstField)
 {
     return(AddField(groupBy, startDate, endDate, ref firstField, 1));
 }
示例#16
0
        private void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, int groupInterval)
        {
            if (groupInterval < 1 || groupInterval >= Int16.MaxValue)
            {
                throw (new ArgumentOutOfRangeException("Group interval is out of range"));
            }
            if (groupInterval > 1 && groupBy != eDateGroupBy.Days)
            {
                throw (new ArgumentException("Group interval is can only be used when groupBy is Days"));
            }
            if (Cache.DatabaseField == false)
            {
                throw new InvalidOperationException("The field for grouping can not be a calculated field.");
            }
            ValidateGrouping();

            _items = null;

            bool firstField = true;
            var  fields     = _pivotTable.Fields.Count;

            //Seconds
            if ((groupBy & eDateGroupBy.Seconds) == eDateGroupBy.Seconds)
            {
                AddField(eDateGroupBy.Seconds, startDate, endDate, ref firstField);
            }
            //Minutes
            if ((groupBy & eDateGroupBy.Minutes) == eDateGroupBy.Minutes)
            {
                AddField(eDateGroupBy.Minutes, startDate, endDate, ref firstField);
            }
            //Hours
            if ((groupBy & eDateGroupBy.Hours) == eDateGroupBy.Hours)
            {
                AddField(eDateGroupBy.Hours, startDate, endDate, ref firstField);
            }
            //Days
            if ((groupBy & eDateGroupBy.Days) == eDateGroupBy.Days)
            {
                AddField(eDateGroupBy.Days, startDate, endDate, ref firstField, groupInterval);
            }
            //Month
            if ((groupBy & eDateGroupBy.Months) == eDateGroupBy.Months)
            {
                AddField(eDateGroupBy.Months, startDate, endDate, ref firstField);
            }
            //Quarters
            if ((groupBy & eDateGroupBy.Quarters) == eDateGroupBy.Quarters)
            {
                AddField(eDateGroupBy.Quarters, startDate, endDate, ref firstField);
            }
            //Years
            if ((groupBy & eDateGroupBy.Years) == eDateGroupBy.Years)
            {
                AddField(eDateGroupBy.Years, startDate, endDate, ref firstField);
            }

            if (fields > _pivotTable.Fields.Count)
            {
                _cacheField.SetXmlNodeString("d:fieldGroup/@par", (_pivotTable.Fields.Count - 1).ToString());
            }
            if (groupInterval != 1)
            {
                _cacheField.SetXmlNodeString("d:fieldGroup/d:rangePr/@groupInterval", groupInterval.ToString());
            }
            else
            {
                _cacheField.DeleteNode("d:fieldGroup/d:rangePr/@groupInterval");
            }
        }
示例#17
0
 /// <summary>
 /// Add a date grouping on this field.
 /// </summary>
 /// <param name="groupBy">Group by</param>
 public void AddDateGrouping(eDateGroupBy groupBy)
 {
     AddDateGrouping(groupBy, DateTime.MinValue, DateTime.MaxValue, 1);
 }
示例#18
0
 /// <summary>
 /// Add a date grouping on this field.
 /// </summary>
 /// <param name="groupBy">Group by</param>
 /// <param name="startDate">Fixed start date. Use DateTime.MinValue for auto</param>
 /// <param name="endDate">Fixed end date. Use DateTime.MaxValue for auto</param>
 public void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate)
 {
     AddDateGrouping(groupBy, startDate, endDate, 1);
 }
示例#19
0
        private int AddDateGroupItems(ExcelPivotTableFieldGroup group, eDateGroupBy GroupBy, DateTime StartDate, DateTime EndDate, int interval)
        {
            XmlElement groupItems = group.TopNode.SelectSingleNode("d:fieldGroup/d:groupItems", group.NameSpaceManager) as XmlElement;
            int        items      = 2;

            //First date
            AddGroupItem(groupItems, "<" + StartDate.ToString("s", CultureInfo.InvariantCulture).Substring(0, 10));

            switch (GroupBy)
            {
            case eDateGroupBy.Seconds:
            case eDateGroupBy.Minutes:
                AddTimeSerie(60, groupItems);
                items += 60;
                break;

            case eDateGroupBy.Hours:
                AddTimeSerie(24, groupItems);
                items += 24;
                break;

            case eDateGroupBy.Days:
                if (interval == 1)
                {
                    DateTime dt = new DateTime(2008, 1, 1);     //pick a year with 366 days
                    while (dt.Year == 2008)
                    {
                        AddGroupItem(groupItems, dt.ToString("dd-MMM"));
                        dt = dt.AddDays(1);
                    }
                    items += 366;
                }
                else
                {
                    DateTime dt = StartDate;
                    items = 0;
                    while (dt < EndDate)
                    {
                        AddGroupItem(groupItems, dt.ToString("dd-MMM"));
                        dt = dt.AddDays(interval);
                        items++;
                    }
                }
                break;

            case eDateGroupBy.Months:
                AddGroupItem(groupItems, "jan");
                AddGroupItem(groupItems, "feb");
                AddGroupItem(groupItems, "mar");
                AddGroupItem(groupItems, "apr");
                AddGroupItem(groupItems, "may");
                AddGroupItem(groupItems, "jun");
                AddGroupItem(groupItems, "jul");
                AddGroupItem(groupItems, "aug");
                AddGroupItem(groupItems, "sep");
                AddGroupItem(groupItems, "oct");
                AddGroupItem(groupItems, "nov");
                AddGroupItem(groupItems, "dec");
                items += 12;
                break;

            case eDateGroupBy.Quarters:
                AddGroupItem(groupItems, "Qtr1");
                AddGroupItem(groupItems, "Qtr2");
                AddGroupItem(groupItems, "Qtr3");
                AddGroupItem(groupItems, "Qtr4");
                items += 4;
                break;

            case eDateGroupBy.Years:
                if (StartDate.Year >= 1900 && EndDate != DateTime.MaxValue)
                {
                    for (int year = StartDate.Year; year <= EndDate.Year; year++)
                    {
                        AddGroupItem(groupItems, year.ToString());
                    }
                    items += EndDate.Year - StartDate.Year + 1;
                }
                break;

            default:
                throw (new Exception("unsupported grouping"));
            }

            //Lastdate
            AddGroupItem(groupItems, ">" + EndDate.ToString("s", CultureInfo.InvariantCulture).Substring(0, 10));
            return(items);
        }
        internal ExcelPivotTableCacheField AddDateGroupField(ExcelPivotTableField field, eDateGroupBy groupBy, DateTime startDate, DateTime endDate, int interval)
        {
            ExcelPivotTableCacheField cacheField = CreateField(groupBy.ToString(), field.Index, false);

            cacheField.SetDateGroup(field, groupBy, startDate, endDate, interval);

            Fields.Add(cacheField);
            return(cacheField);
        }
示例#21
0
 /// <summary>
 /// Add a date grouping on this field.
 /// </summary>
 /// <param name="groupBy">Group by</param>
 /// <param name="startDate">Fixed start date. Use DateTime.MinValue for auto</param>
 /// <param name="endDate">Fixed end date. Use DateTime.MaxValue for auto</param>
 public void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate)
 {
     AddDateGrouping(groupBy, startDate, endDate, 1);
 }
示例#22
0
 private ExcelPivotTableField AddField(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, ref  bool firstField)
 {
     return AddField(groupBy, startDate, endDate, ref firstField,1);
 }
示例#23
0
        private void AddDateGrouping(eDateGroupBy groupBy, DateTime startDate, DateTime endDate, int groupInterval)
        {
            if (groupInterval < 1 || groupInterval >= Int16.MaxValue)
            {
                throw (new ArgumentOutOfRangeException("Group interval is out of range"));
            }
            if (groupInterval > 1 && groupBy != eDateGroupBy.Days)
            {
                throw (new ArgumentException("Group interval is can only be used when groupBy is Days"));
            }
            ValidateGrouping();

            bool firstField = true;            
            List<ExcelPivotTableField> fields=new List<ExcelPivotTableField>();
            //Seconds
            if ((groupBy & eDateGroupBy.Seconds) == eDateGroupBy.Seconds)
            {
                fields.Add(AddField(eDateGroupBy.Seconds, startDate, endDate, ref firstField));
            }
            //Minutes
            if ((groupBy & eDateGroupBy.Minutes) == eDateGroupBy.Minutes)
            {
                fields.Add(AddField(eDateGroupBy.Minutes, startDate, endDate, ref firstField));
            }
            //Hours
            if ((groupBy & eDateGroupBy.Hours) == eDateGroupBy.Hours)
            {
                fields.Add(AddField(eDateGroupBy.Hours, startDate, endDate, ref firstField));
            }
            //Days
            if ((groupBy & eDateGroupBy.Days) == eDateGroupBy.Days)
            {
                fields.Add(AddField(eDateGroupBy.Days, startDate, endDate, ref firstField, groupInterval));
            }
            //Month
            if ((groupBy & eDateGroupBy.Months) == eDateGroupBy.Months)
            {
                fields.Add(AddField(eDateGroupBy.Months, startDate, endDate, ref firstField));
            }
            //Quarters
            if ((groupBy & eDateGroupBy.Quarters) == eDateGroupBy.Quarters)
            {
                fields.Add(AddField(eDateGroupBy.Quarters, startDate, endDate, ref firstField));
            }
            //Years
            if ((groupBy & eDateGroupBy.Years) == eDateGroupBy.Years)
            {
                fields.Add(AddField(eDateGroupBy.Years, startDate, endDate, ref firstField));
            }

            if (fields.Count > 1) _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/@par", (_table.Fields.Count - 1).ToString());
            if (groupInterval != 1)
            {
                _cacheFieldHelper.SetXmlNodeString("d:fieldGroup/d:rangePr/@groupInterval", groupInterval.ToString());
            }
            else
            {
                _cacheFieldHelper.DeleteNode("d:fieldGroup/d:rangePr/@groupInterval");
            }
            _items = null;
        }