示例#1
0
        /// <summary>
        /// Builds an <c>AggregateCriteria</c> object.
        /// </summary>
        /// <param name="aggregateDefinitions">The collection of aggregate definitions.</param>
        /// <param name="sourceQueryCriteria">The data source query criteria.</param>
        /// <returns>Cebos.Veyron.SharedTypes.AggregateCriteria</returns>
        private static AggregateCriteria BuildAggregateCriteria(IEnumerable<AggregateDefinition> aggregateDefinitions, AggregateDataSourceQueryCriteria sourceQueryCriteria)
        {
            var criteria =
                new AggregateCriteria
                {
                    ProcessName = sourceQueryCriteria.ProcessName,
                    PageNumber = sourceQueryCriteria.PageNumber,
                    PageSize = sourceQueryCriteria.PageSize,
                    GroupColumn = sourceQueryCriteria.GroupColumn,
                    SecurityColumns = sourceQueryCriteria.SecurityColumns != null
                        ? new MobileList<SecurityColumnDescriptor>(sourceQueryCriteria.SecurityColumns)
                        : null,
                    Sortings = sourceQueryCriteria.Sortings,
                    FilterId = sourceQueryCriteria.FilterId,
                    FilterDefinition = sourceQueryCriteria.FilterDefinition,
                    QuickFilterString = sourceQueryCriteria.QuickFilterString
                };

            var definitionsByColumn = new Dictionary<string, List<AggregateDefinition>>();

            foreach (var def in aggregateDefinitions)
            {
                List<AggregateDefinition> defList;
                if (!definitionsByColumn.TryGetValue(def.ColumnName, out defList))
                    definitionsByColumn[def.ColumnName] = defList = new List<AggregateDefinition>();

                defList.Add(def);
            }

            foreach (var columnInfo in definitionsByColumn)
            {
                var aggregates = columnInfo.Value;

                var columnItem = new AggregateColumnItem
                {
                    ColumnName = columnInfo.Key,
                    CustomConverter = aggregates[0].CustomConverter,
                    TargetType = aggregates[0].TargetType,
                    TypeName = aggregates[0].TypeName,
                    ConverterParameter = aggregates[0].ConverterParameter
                };

                foreach (var aggrDef in aggregates)
                {
                    columnItem.AggregatesEnabled.Add(
                        new AggregateTypeInfo
                        {
                            SummaryType = aggrDef.SummaryType
                        });
                }

                criteria.Columns.Add(columnItem);
            }

            return criteria;
        }
示例#2
0
        public static void CalculateAggregats(bool isClient, GridViewDataControl grid, AggregateCriteria criteria, IColumnItem currentColumn, string result)
        {
            var f = new AggregateFunction<object, object>
                        {
                            Caption = string.Format(CultureInfo.InvariantCulture, "{0}:", AggregateHelper.GetAttribute(criteria.SummaryType).FullName),
                            FunctionName = string.Format(CultureInfo.InvariantCulture, "{0}{1}", criteria.SelectedColumn, criteria.SummaryType)
                        };

            if (isClient)
                f.AggregationExpression = x => x.ClientCalculateAggregates(criteria);
            else
                f.AggregationExpression = x => result;

            if (currentColumn != null)
            {
                if (grid != null)
                {
                    grid.Columns[currentColumn.FullyQualifiedName].AggregateFunctions.Add(f);
                    var ordered = grid.Columns[currentColumn.FullyQualifiedName].AggregateFunctions.OrderBy(x => AggregateHelper.GetAttribute(AggregateHelper.GetTypeByFullName(x.Caption.Replace(":", null))).Order).ToList();
                    grid.Columns[currentColumn.FullyQualifiedName].AggregateFunctions.Clear();
                    grid.Columns[currentColumn.FullyQualifiedName].AggregateFunctions.AddRange(ordered);
                }

                currentColumn.AggregateCriteriaList.Add(criteria);
            }

            if (!isClient)
                if (grid != null)
                    grid.CalculateAggregates();
        }
示例#3
0
        /// <summary>
        /// Reads data retrieved from database and converts 
        /// it into the collection of <c>AggregateResult</c> objects.
        /// </summary>
        /// <param name="reader">The data reader.</param>
        /// <param name="criteria">The aggregate critetia.</param>
        /// <returns>The collection of aggregate results.</returns>
        public static IList<AggregateResult> ProcessResultData(SqlDataReader reader, AggregateCriteria criteria)
        {
            var list = new List<AggregateResult>();

            if (reader == null || criteria == null)
                return list;

            if (reader.FieldCount == 2)
            {
                while (reader.Read())
                {
                    var aggregationInfo = reader.GetString("AggregationInfo");
                    var resultValue = reader.GetValue("Result");

                    if (string.IsNullOrWhiteSpace(aggregationInfo))
                        continue;

                    var aggregationInfoParts = aggregationInfo.Split(' ');
                    var column = criteria.Columns.First(x => x.ColumnName == aggregationInfoParts[0]);
                    var aggregateType = (SummaryTypes) Enum.Parse(typeof (SummaryTypes), aggregationInfoParts[1]);

                    list.Add(
                        new AggregateResult
                        {
                            ColumnName = column.ColumnName,
                            SummaryType = aggregateType,
                            Value = FormatResult(
                                        resultValue, aggregateType.ToString(),
                                        column.CustomConverter, column.TargetType, column.TypeName, column.ConverterParameter)
                                    .ToString()
                        });
                }

                reader.NextResult();
            }

            if (reader.HasRows)
            {
                do
                {
                    var columnName = reader.GetName(0);
                    var blocked = columnName.EndsWith("Blocked", StringComparison.Ordinal);

                    columnName = columnName.Replace("Blocked", string.Empty);

                    var column = criteria.Columns.FirstOrDefault(
                        x => x.ColumnName == columnName.TrimEnd("Page") ||
                             x.ColumnName == columnName.TrimEnd("All"));
                    if (column == null)
                        continue;

                    var aggregateDefinitions = column.AggregatesEnabled
                        .Where(x => (x.SummaryType.ToString().StartsWith("Min", StringComparison.Ordinal) ||
                                     x.SummaryType.ToString().StartsWith("Max", StringComparison.Ordinal)) &&
                                    (AggregateHelper.IsPageAggregateType(x.SummaryType)
                                            ? columnName.EndsWith("Page", StringComparison.Ordinal)
                                            : columnName.EndsWith("All", StringComparison.Ordinal))
                              )
                        .Select(x => AggregateDefinition.Create(
                                        column.ColumnName, x.SummaryType.ToString(),
                                        column.CustomConverter, column.TargetType,
                                        column.TypeName, column.ConverterParameter)
                               )
                        .ToList();

                    if (blocked)
                    {
                        list.AddRange(
                            aggregateDefinitions.Select(
                                x => AggregateResult.CreateBlocked(x.ColumnName, x.SummaryType)));

                        continue;
                    }

                    var dataSet = new List<object>();
                    while (reader.Read())
                    {
                        dataSet.Add(reader.GetValue(0));
                    }

                    dataSet = dataSet
                        .Select(x =>
                            PrepareValue(
                                x, SummaryTypes.Count.ToString(), column.CustomConverter,
                                column.TargetType, column.TypeName, column.ConverterParameter,
                                column.ColumnName))
                        .Where(x => x != null)
                        .ToList();

                    list.AddRange(
                        CalculateAggregates(dataSet, aggregateDefinitions));
                }
                while (reader.NextResult());
            }

            return list;
        }