示例#1
0
        public IEnumerable <DataPropertyDescriptor> GetItemProperties(IEnumerable <RowItem> rowItems)
        {
            var columnNames         = new HashSet <string>();
            var propertyDescriptors = new List <DataPropertyDescriptor>();
            var pivotDisplayColumns = new Dictionary <PivotKey, List <DisplayColumn> >();
            var rowItemsArray       = rowItems as RowItem[] ?? rowItems.ToArray();

            foreach (var displayColumn in ViewInfo.DisplayColumns)
            {
                if (displayColumn.ColumnSpec.Hidden)
                {
                    continue;
                }
                var pivotColumn = PivotColumns.LastOrDefault(pc => displayColumn.PropertyPath.StartsWith(pc.PropertyPath));
                ICollection <PivotKey> pivotKeys = null;
                if (pivotColumn != null)
                {
                    pivotKeys = GetPivotKeys(pivotColumn.PropertyPath, rowItemsArray);
                }

                if (pivotKeys == null)
                {
                    propertyDescriptors.Add(new ColumnPropertyDescriptor(displayColumn, MakeUniqueName(columnNames, displayColumn.PropertyPath)));
                    continue;
                }
                foreach (var value in pivotKeys)
                {
                    List <DisplayColumn> columns;
                    if (!pivotDisplayColumns.TryGetValue(value, out columns))
                    {
                        columns = new List <DisplayColumn>();
                        pivotDisplayColumns.Add(value, columns);
                    }
                    columns.Add(displayColumn);
                }
            }
            var allPivotKeys = pivotDisplayColumns.Keys.ToArray();

            Array.Sort(allPivotKeys, PivotKey.GetComparer(ViewInfo.DataSchema));
            foreach (var pivotKey in allPivotKeys)
            {
                foreach (var pivotColumn in pivotDisplayColumns[pivotKey])
                {
                    var qualifiedPropertyPath = PivotKey.QualifyPropertyPath(pivotKey, pivotColumn.PropertyPath);
                    var columnName            = MakeUniqueName(columnNames, qualifiedPropertyPath);
                    propertyDescriptors.Add(new ColumnPropertyDescriptor(pivotColumn, columnName, qualifiedPropertyPath, pivotKey));
                }
            }
            return(propertyDescriptors);
        }