/// <summary>
        /// Updates aggregate functions by name.
        /// </summary>
        /// <param name="functionName">The function name.</param>
        /// <param name="result">The aggregate result.</param>
        /// <param name="gridColumn">The grid column.</param>
        private static void UpdateFunctions(string functionName, AggregateResult result, GridViewColumn gridColumn)
        {
            if (gridColumn == null || string.IsNullOrWhiteSpace(functionName))
                return;

            var aggregateFunctions = gridColumn.AggregateFunctions;

            var func = aggregateFunctions.Cast<AggregateFunction<object, object>>().FirstOrDefault(x => x.FunctionName == functionName);
            if (func == null)
            {
                func = CreateAggregateFunction(functionName, result.SummaryType, result.Value);

                var index = aggregateFunctions.TakeWhile(x =>
                                    AggregateHelper.GetAttribute(
                                        AggregateHelper.GetTypeByFullName(x.Caption.Replace(":", null))).Order <
                                    AggregateHelper.GetAttribute(result.SummaryType).Order).Count();

                if (aggregateFunctions.Count < index)
                    aggregateFunctions.Add(func);
                else
                    aggregateFunctions.Insert(index, func);
            }
            else
            {
                func.AggregationExpression = x => result.Value;
            }
        }
        /// <summary>
        /// Updates aggregate function according to aggregation result.
        /// </summary>
        /// <param name="gridColumn">The grid column.</param>
        /// <param name="columnItem">The column item.</param>
        /// <param name="aggregateDefinition">The aggregate definition.</param>
        /// <param name="result">The aggregate result.</param>
        private static void UpdateAggregationResult(GridViewColumn gridColumn, IColumnItem columnItem, AggregateDefinition aggregateDefinition, AggregateResult result)
        {
            if (aggregateDefinition == null || result == null)
                return;

            UpdateFunctions(aggregateDefinition.FunctionName, result, gridColumn);
            UpdateCriteriaList(aggregateDefinition, columnItem);
        }