Beispiel #1
0
        /// <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);
                        }
                    }
                }
            }
        }
Beispiel #2
0
 void Grid_GroupAggregate(object sender, C1GroupTextEventArgs e)
 {
     GroupAggregate(e);
 }