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