private static void UpdateColumnsForeignKeyConfigurationsFromFieldDescriptors(Dictionary <string, ColumnBase> columns, Dictionary <string, ItemsSourceHelper.FieldDescriptor> fieldDescriptors, bool autoCreateForeignKeyConfigurations) { if (columns == null) { return; } if (fieldDescriptors == null) { return; } foreach (ItemsSourceHelper.FieldDescriptor fieldDescriptor in fieldDescriptors.Values) { DataGridForeignKeyDescription description = fieldDescriptor.ForeignKeyDescription; if (description == null) { continue; } ColumnBase column; columns.TryGetValue(fieldDescriptor.Name, out column); ForeignKeyConfiguration.SynchronizeForeignKeyConfigurationFromForeignKeyDescription(column as Column, description, autoCreateForeignKeyConfigurations); } }
internal void SetForeignKeyDescription(DataGridForeignKeyDescription description) { if (m_foreignKeyDescription != description) { m_foreignKeyDescription = description; this.OnPropertyChanged("ForeignKeyDescription"); } }
// If a DataGridCollectionViewBase is used, get the ItemProperties it defines to be able to retreive DataGridForeignKeyDescription for each of them // to get the auto-detected ForeignKey ItemsSource (if any). // If a DataGridCollectionViewBase is not used, the ItemsSource must be manually specified on each Column in order to correctly display/edit the Data internal static void UpdateColumnsForeignKeyConfigurationsFromDataGridCollectionView(Dictionary <string, ColumnBase> columns, DataGridItemPropertyCollection itemProperties, bool autoCreateForeignKeyConfigurations) { if (itemProperties == null) { return; } foreach (DataGridItemPropertyBase itemProperty in itemProperties) { DataGridForeignKeyDescription description = itemProperty.ForeignKeyDescription; if (description == null) { continue; } ColumnBase column; columns.TryGetValue(itemProperty.Name, out column); ForeignKeyConfiguration.SynchronizeForeignKeyConfigurationFromForeignKeyDescription(column as Column, description, autoCreateForeignKeyConfigurations); } }
internal DataGridItemProperty( string name, PropertyDescriptor propertyDescriptor, string title, string valueXPath, string valuePath, Type dataType, bool isAutoCreated, Nullable <bool> isReadOnly, Nullable <bool> overrideReadOnlyForInsertion, Nullable <bool> isASubRelationship, DataGridForeignKeyDescription foreignKeyDescription) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("name cannot be null or empty.", "name"); } if ((string.IsNullOrEmpty(valuePath)) && (string.IsNullOrEmpty(valueXPath)) && (propertyDescriptor == null)) { throw new ArgumentException("The valuePath, valueXPath, or propertyDescriptor must be provided."); } this.Initialize( name, propertyDescriptor, title, valueXPath, valuePath, dataType, isAutoCreated, isReadOnly, overrideReadOnlyForInsertion, isASubRelationship, foreignKeyDescription); }
internal static void SynchronizeForeignKeyConfigurationFromForeignKeyDescription(Column column, DataGridForeignKeyDescription description, bool autoCreateForeignKeyConfigurations) { if ((description == null) || (column == null)) { return; } ForeignKeyConfiguration configuration = column.ForeignKeyConfiguration; if (configuration == null) { if (!autoCreateForeignKeyConfigurations) { return; } configuration = new ForeignKeyConfiguration(); configuration.IsAutoCreated = true; column.ForeignKeyConfiguration = configuration; } // ValuePath will be affected to the FieldName when the configuration is auto-created to be able to modify local source using foreign key value if (configuration.IsAutoCreated) { if (string.IsNullOrEmpty(configuration.ValuePath)) { configuration.ValuePath = description.ValuePath; } if (string.IsNullOrEmpty(configuration.DisplayMemberPath)) { configuration.DisplayMemberPath = description.DisplayMemberPath; } } // Affect the ItemsSource on the configuration if it is not already set if ((configuration.ItemsSource == null) && (description.ItemsSource != null)) { configuration.ItemsSource = description.ItemsSource; } // Set the Converter if it was not locally set if (configuration.ForeignKeyConverter == null) { configuration.ForeignKeyConverter = description.ForeignKeyConverter; } }
private void Initialize( string name, PropertyDescriptor propertyDescriptor, string title, string valueXPath, string valuePath, Type dataType, bool isAutoCreated, Nullable <bool> isReadOnly, Nullable <bool> overrideReadOnlyForInsertion, Nullable <bool> isASubRelationship, DataGridForeignKeyDescription foreignKeyDescription) { this.IsAutoCreated = isAutoCreated; m_valueXPath = valueXPath; m_valuePath = valuePath; m_propertyDescriptor = propertyDescriptor; if (m_propertyDescriptor == null) { if ((string.IsNullOrEmpty(m_valueXPath)) && (m_valuePath == ".")) { m_propertyDescriptor = new SelfPropertyDescriptor(dataType); } } if (m_propertyDescriptor != null) { this.Browsable = m_propertyDescriptor.IsBrowsable; if (m_propertyDescriptor.IsReadOnly) { isReadOnly = m_propertyDescriptor.IsReadOnly; } } if (title == null) { if (m_propertyDescriptor != null) { title = m_propertyDescriptor.DisplayName; } } if (isReadOnly == null) { if (m_propertyDescriptor != null) { isReadOnly = m_propertyDescriptor.IsReadOnly; } } if (dataType == null) { if (m_propertyDescriptor != null) { dataType = m_propertyDescriptor.PropertyType; } } this.ForeignKeyDescription = foreignKeyDescription; base.Initialize(name, title, dataType, isReadOnly, overrideReadOnlyForInsertion, isASubRelationship); }