/// <summary> /// Formats group header information. /// </summary> /// <param name="e"></param> private void GroupAggregate(C1GroupTextEventArgs e) { if (CalculateAggragateSums) { var groupColumnIndex = Grid.GroupedColumns.IndexOf(e.GroupCol); var listIndex = (Grid.PageIndex * Grid.PageSize) + e.StartItemIndex; if (listIndex > Page.Data.Count - 1) { listIndex = e.StartItemIndex; } var refValue = Page.Data[listIndex]; var list = Page.Data.ToList(); //var key = groupColumnIndex + listIndex; var key = string.Empty; for (var j = 0; j <= groupColumnIndex; j++) { var col = Grid.GroupedColumns[j] as C1BoundField; string dataField; if (col != null) { dataField = col.DataField; } else { var temp = Grid.GroupedColumns[j] as C1TemplateField; if (temp == null) { continue; } var originalIndex = GetOriginalColumnIndex(Grid.Columns.IndexOf(Grid.GroupedColumns[j])); var properties = from p in typeof(T).GetProperties() let atts = p.GetGridMappingAttributes() where atts.Count() > 0 && atts.First().IsTemplate && atts.First().Index == originalIndex select p.Name; if (properties.Count() == 0) { continue; } dataField = properties.First(); } key += string.Concat("[", refValue.GetReflectedValue(dataField).ToString(), "]"); list = (from o in list let data = o.GetReflectedValue(dataField) where data != null && data.Equals(refValue.GetReflectedValue(dataField)) select o).ToList(); } var subtotales = CalcularSubTotales(list, key); if (subtotales.Count >= Aggregates.Count) { for (var i = 0; i < Aggregates.Count; i++) { var aggregate = Aggregates[i]; var aggregateIndex = aggregate.OriginalColumnIndex; var columnIndex = GetOriginalColumnIndex(GetColumnIndex(e.Col)); if (aggregateIndex.Equals(columnIndex)) { e.Text = GetFormatedTotalString((double)subtotales[i], aggregate, list); } } } } }
void Grid_GroupAggregate(object sender, C1GroupTextEventArgs e) { GroupAggregate(e); }