/// <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); } } }
/// <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); }