Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
 internal void SetForeignKeyDescription(DataGridForeignKeyDescription description)
 {
     if (m_foreignKeyDescription != description)
     {
         m_foreignKeyDescription = description;
         this.OnPropertyChanged("ForeignKeyDescription");
     }
 }
Ejemplo n.º 3
0
        // 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);
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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);
        }