コード例 #1
0
ファイル: SpreadsheetView.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Populates the columns.
        /// </summary>
        /// <param name="itemsCollection">The items collection.</param>
        private void PopulateColumns(SpreadsheetElementCollection itemsCollection)
        {
            if (itemsCollection == null || Columns == null) 
                return;

            var type = itemsCollection.ElementDataType;
            if (type == null)
                return;

            if (IsTopLevel)
            {
                var rowIndicator = Columns.OfType<RowIndicatorColumn>().FirstOrDefault();
                if (rowIndicator != null)
                    Columns.Remove(rowIndicator);

                if (RowIndicatorVisibility == Visibility.Visible)
                {
                    var column = new RowIndicatorColumn(this)
                    {
                        Width = 30,
                        Header = "#",
                        Background = ColumnHeaderBackground,
                        Foreground = new SolidColorBrush(Colors.White),
                        HorizontalAlignment = HorizontalAlignment.Center,
                        VerticalAlignment = VerticalAlignment.Center,
                    };

                    Columns.Insert(0, column);
                }
            }

            if (AutoGenerateColumns)
            {
                if (ParentSpreadsheet != null)
                    Columns.Clear();
                else
                {
                    var rowIndicator = Columns.OfType<RowIndicatorColumn>().FirstOrDefault();
                    Columns.Clear();

                    if (rowIndicator != null)
                        Columns.Add(rowIndicator);
                }
                
                var topLevelSpreadsheet = GetTopLevelSpreadsheet();

                if (type.IsDetailedClass() || type.IsCustomStructPublicPropsW())
                {
                    var props = type.GetProperties();

                    foreach (var prop in props)
                    {
                        var column = topLevelSpreadsheet.GetColumn(type, prop);
                        if (column == null)
                        {
                            column = SpreadsheetColumnManager.CreateColumn(prop, this);
                            if (column == null)
                                continue;

                            column.Header = GetHeader(prop);
                            column.IsAutogenerated = true;

                            topLevelSpreadsheet.AddColumn(type, prop, column);
                        }
                        Columns.Add(column);
                        column.SetPreviousColumn();
                    }
                }
                else
                {
                    PropertyInfo propertyInfo = null;
                    var header = string.Empty;
                    IStackColumn parentColumn = null;
                    ISimpleColumn column = null;
                    var hideColumn = false;

                    if (ParentCell != null)
                    {
                        parentColumn = ParentColumn;
                        column = topLevelSpreadsheet.GetColumn(type, ParentColumn.PropertyInfo) as ISimpleColumn;
                        propertyInfo = ParentColumn.PropertyInfo;
                        hideColumn = true;
                        header = string.Format(CultureInfo.InvariantCulture, "{0}_", parentColumn.Header);
                    }
                    else
                    {
                        header = "Items";
                    }

                    if (column == null)
                    {
                        column = SpreadsheetColumnManager.CreateColumn(type, this) as ISimpleColumn;

                        if (column != null)
                        {
                            column.Header = header;
                            column.IsAutogenerated = true;
                            column.IsGhost = hideColumn;

                            if (parentColumn != null)
                                column.PropertyName = parentColumn.PropertyName;

                            topLevelSpreadsheet.AddColumn(type, propertyInfo, column);
                        }
                    }

                    if (column != null)
                    {
                        Columns.Add(column);
                        column.SetPreviousColumn();
                    }
                }                
            }
            else
            {
                foreach (var column in Columns.Where(x => !string.IsNullOrEmpty(x.PropertyName)))
                {
                    if (column.Header == null && !(column is RowIndicatorColumn))
                    {
                        var prop = type.GetProperty(column.PropertyName);
                        column.Header = GetHeader(prop);
                        column.PropertyInfo = prop;
                    }

                    var topLevelSpreadsheet = GetTopLevelSpreadsheet();
                    var forceSetValue = false;
                    if (topLevelSpreadsheet.GetColumn(type, column.PropertyInfo) == null)
                    {
                        topLevelSpreadsheet.AddColumn(type, column.PropertyInfo, column);
                        forceSetValue = true;
                    }

                    column.SetOwner(this, forceSetValue);
                    column.SetPreviousColumn(forceSetValue);
                }
            }
        }
コード例 #2
0
ファイル: SpreadsheetView.cs プロジェクト: mparsin/Elements
 /// <summary>
 /// Fills the items source.
 /// </summary>
 /// <param name="sourceCollection">The source collection.</param>
 private void FillItemsSource(IEnumerable sourceCollection)
 {
     var wrappedCollection = new SpreadsheetElementCollection(sourceCollection);
     PopulateColumns(wrappedCollection);
     SetValue(ItemsControl.ItemsSourceProperty, wrappedCollection);
 }