public static void UpdateColumnsOnItemsPropertiesChanged( DataGridControl dataGridControl, ColumnCollection columns, bool autoCreateForeignKeyConfigurations, NotifyCollectionChangedEventArgs e, DataGridItemPropertyCollection itemProperties ) { if( dataGridControl == null ) return; switch( e.Action ) { case NotifyCollectionChangedAction.Add: { foreach( DataGridItemPropertyBase itemProperty in e.NewItems ) { string name = itemProperty.Name; if( columns[ name ] == null ) { Column column = ItemsSourceHelper.CreateColumnFromItemsSourceField( dataGridControl, dataGridControl.DefaultCellEditors, ItemsSourceHelper.CreateFieldFromDataGridItemProperty( itemProperty ), autoCreateForeignKeyConfigurations ); if( column != null ) { columns.Add( column ); ItemsSourceHelper.ApplySettingsRepositoryToColumn( column ); } } } } break; case NotifyCollectionChangedAction.Remove: { foreach( DataGridItemPropertyBase itemProperty in e.OldItems ) { string name = itemProperty.Name; Column column = columns[ name ] as Column; if( ( column != null ) && ( column.IsAutoCreated ) ) { columns.Remove( column ); } } break; } case NotifyCollectionChangedAction.Replace: { foreach( DataGridItemPropertyBase itemProperty in e.OldItems ) { string name = itemProperty.Name; Column column = columns[ name ] as Column; if( ( column != null ) && ( column.IsAutoCreated ) ) { columns.Remove( column ); } } foreach( DataGridItemPropertyBase itemProperty in e.NewItems ) { string name = itemProperty.Name; if( columns[ name ] == null ) { Column column = ItemsSourceHelper.CreateColumnFromItemsSourceField( dataGridControl, dataGridControl.DefaultCellEditors, ItemsSourceHelper.CreateFieldFromDataGridItemProperty( itemProperty ), autoCreateForeignKeyConfigurations ); if( column != null ) { columns.Add( column ); ItemsSourceHelper.ApplySettingsRepositoryToColumn( column ); } } } break; } case NotifyCollectionChangedAction.Reset: { for( int i = columns.Count - 1; i >= 0; i-- ) { Column dataColumn = columns[ i ] as Column; if( ( dataColumn != null ) && ( dataColumn.IsAutoCreated ) ) { columns.Remove( dataColumn ); } } foreach( DataGridItemPropertyBase itemProperty in itemProperties ) { string name = itemProperty.Name; if( columns[ name ] == null ) { Column column = ItemsSourceHelper.CreateColumnFromItemsSourceField( dataGridControl, dataGridControl.DefaultCellEditors, ItemsSourceHelper.CreateFieldFromDataGridItemProperty( itemProperty ), autoCreateForeignKeyConfigurations ); if( column != null ) { columns.Add( column ); ItemsSourceHelper.ApplySettingsRepositoryToColumn( column ); } } } break; } //case NotifyCollectionChangedAction.Move: default: break; } }
public static void CleanUpColumns( ColumnCollection columns, bool deleteAutoCreatedColumn ) { ColumnBase[] tempColumns = new ColumnBase[ columns.Count ]; columns.CopyTo( tempColumns, 0 ); foreach( ColumnBase column in tempColumns ) { Column dataColumn = column as Column; if( dataColumn == null ) continue; if( ( deleteAutoCreatedColumn ) && ( dataColumn.IsAutoCreated ) ) { columns.Remove( column ); } else if( dataColumn.IsBindingAutoCreated ) { // Disable warning for DisplayMemberBinding when internaly used #pragma warning disable 618 //clear the display member binding. dataColumn.DisplayMemberBinding = null; #pragma warning restore 618 dataColumn.IsBindingAutoCreated = false; dataColumn.IsBoundToDataGridUnboundItemProperty = false; } } }