コード例 #1
0
ファイル: ListControl.cs プロジェクト: weiplanet/winforms
        private void WireDataSource()
        {
            // If the source is a component, then hook the Disposed event,
            // so we know when the component is deleted from the form
            if (this.dataSource is IComponent)
            {
                ((IComponent)this.dataSource).Disposed += new EventHandler(DataSourceDisposed);
            }

            ISupportInitializeNotification dsInit = (this.dataSource as ISupportInitializeNotification);

            if (dsInit != null && !dsInit.IsInitialized)
            {
                // If the source provides initialization notification, and is not yet
                // fully initialized, then hook the Initialized event, so that we can
                // delay connecting to it until it *is* initialized.
                dsInit.Initialized         += new EventHandler(DataSourceInitialized);
                isDataSourceInitEventHooked = true;
                isDataSourceInitialized     = false;
            }
            else
            {
                // Otherwise either the data source says it *is* initialized, or it
                // does not support the capability to report whether its initialized,
                // in which case we have to just assume it that is initialized.
                isDataSourceInitialized = true;
            }
        }
コード例 #2
0
        public void BeginInitEndInit_WithInitializedEvent_CallsEvent()
        {
            using var bindingSource = new BindingSource();
            ISupportInitializeNotification source = bindingSource;
            int          callCount = 0;
            EventHandler handler   = (sender, e) =>
            {
                callCount++;
                Assert.Same(source, sender);
                Assert.Equal(EventArgs.Empty, e);
            };

            source.Initialized += handler;

            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(1, callCount);

            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(2, callCount);

            // Remove handler.
            source.Initialized -= handler;
            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(2, callCount);
        }
コード例 #3
0
        public void ISupportInitializeNotification_GetProperties_ReturnsExpected()
        {
            using var bindingSource = new BindingSource();
            ISupportInitializeNotification source = bindingSource;

            Assert.True(source.IsInitialized);
        }
コード例 #4
0
        public void BeginInitEndInit_WithISupportInitializeNotificationDataSourceInitialized_DoesNotWaitForDataSourceInitialize()
        {
            var dataSource = new ISupportInitializeNotificationDataSource {
                IsInitializedResult = true
            };

            using var bindingSource = new BindingSource(dataSource, nameof(ISupportInitializeNotificationDataSource.Member));
            ISupportInitializeNotification source = bindingSource;
            int          callCount = 0;
            EventHandler handler   = (sender, e) =>
            {
                callCount++;
                Assert.Same(source, sender);
                Assert.Equal(EventArgs.Empty, e);
            };

            source.Initialized += handler;

            source.BeginInit();
            Assert.False(source.IsInitialized);
            Assert.Equal(0, callCount);

            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(1, callCount);

            // Call again.
            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(2, callCount);
        }
コード例 #5
0
        void DataSourceEndInitHandler(object o, EventArgs args)
        {
            ((ISupportInitializeNotification)datasource).Initialized -= DataSourceEndInitHandler;

            ISupportInitializeNotification inotif = (ISupportInitializeNotification)this;

            inotif.EndInit();
        }
コード例 #6
0
ファイル: ListControl.cs プロジェクト: weiplanet/winforms
        private void DataSourceInitialized(object sender, EventArgs e)
        {
            ISupportInitializeNotification dsInit = (this.dataSource as ISupportInitializeNotification);

            Debug.Assert(dsInit != null, "ListControl: ISupportInitializeNotification.Initialized event received, but current DataSource does not support ISupportInitializeNotification!");
            Debug.Assert(dsInit.IsInitialized, "ListControl: DataSource sent ISupportInitializeNotification.Initialized event but before it had finished initializing.");
            SetDataConnection(this.dataSource, this.displayMember, true);
        }
コード例 #7
0
ファイル: RadDataLayout.cs プロジェクト: RichardHaggard/BDC
        private void supportInitializeDataSource_Initialized(object sender, EventArgs e)
        {
            ISupportInitializeNotification initializeNotification = sender as ISupportInitializeNotification;

            if (initializeNotification != null)
            {
                initializeNotification.Initialized -= new EventHandler(this.supportInitializeDataSource_Initialized);
            }
            this.TrySubscribeControls();
        }
コード例 #8
0
        private void notification_Initialized(object sender, EventArgs e)
        {
            ISupportInitializeNotification dataSource = this.dataSource as ISupportInitializeNotification;

            if (dataSource != null)
            {
                dataSource.Initialized -= new EventHandler(this.notification_Initialized);
            }
            this.Bind(this.dataSource, this.dataMember);
        }
コード例 #9
0
        public void BeginInitEndInit_Invoke_Success()
        {
            using var bindingSource = new BindingSource();
            ISupportInitializeNotification source = bindingSource;

            source.BeginInit();
            Assert.False(source.IsInitialized);

            source.EndInit();
            Assert.True(source.IsInitialized);
        }
コード例 #10
0
        private void DataSource_Initialized(object sender, EventArgs e)
        {
            ISupportInitializeNotification dataSource = this.dataSource as ISupportInitializeNotification;

            if (dataSource != null)
            {
                dataSource.Initialized -= new EventHandler(this.DataSource_Initialized);
            }
            this.waitingOnDataSource   = false;
            this.dataSourceInitialized = true;
            this.CheckBinding();
        }
コード例 #11
0
        private void UnwireDataSource()
        {
            if (this.dataSource is IComponent)
            {
                ((IComponent)this.dataSource).Disposed -= new EventHandler(this.DataSourceDisposed);
            }
            ISupportInitializeNotification dataSource = this.dataSource as ISupportInitializeNotification;

            if ((dataSource != null) && this.isDataSourceInitEventHooked)
            {
                dataSource.Initialized          -= new EventHandler(this.DataSourceInitialized);
                this.isDataSourceInitEventHooked = false;
            }
        }
コード例 #12
0
        private void UnwireDataSource()
        {
            if (_dataSource is IComponent)
            {
                ((IComponent)_dataSource).Disposed -= new EventHandler(this.DataSourceDisposed);
            }

            ISupportInitializeNotification notification = _dataSource as ISupportInitializeNotification;

            if ((notification != null) && _isDataSourceInitEventHooked)
            {
                notification.Initialized    -= new EventHandler(this.DataSourceInitialized);
                _isDataSourceInitEventHooked = false;
            }
        }
コード例 #13
0
        private void UnwireDataSource() {
                // If the source is a component, then unhook the Disposed event
                if (this.dataSource is IComponent) {
                    ((IComponent) this.dataSource).Disposed -= new EventHandler(DataSourceDisposed);
                }

                ISupportInitializeNotification dsInit = (this.dataSource as ISupportInitializeNotification);

                if (dsInit != null && isDataSourceInitEventHooked) {
                    // If we previously hooked the data source's ISupportInitializeNotification
                    // Initialized event, then unhook it now (we don't always hook this event,
                    // only if we needed to because the data source was previously uninitialized)
                    dsInit.Initialized -= new EventHandler(DataSourceInitialized);
                    isDataSourceInitEventHooked = false;
                }
        }
コード例 #14
0
        /// <summary>
        /// Sets the data source to the BindingProviderBase. This triggers items creation and removal or previous binding.
        /// </summary>
        public void SetDataSource(object value, string bindingPath)
        {
            this.bindingPath = bindingPath;

            if (this.dataSource == value)
            {
                return;
            }

            if (this.dataSource is IComponent)
            {
                (this.dataSource as IComponent).Disposed -= BindingProviderBase_Disposed;
            }

            if (this.dataSource is ISupportInitializeNotification)
            {
                (this.dataSource as ISupportInitializeNotification).Initialized -= new EventHandler(BindingProviderBase_Initialized);
            }

            this.dataSource = value;

            if (this.dataSource is ISupportInitializeNotification)
            {
                ISupportInitializeNotification tmp = this.dataSource as ISupportInitializeNotification;
                tmp.Initialized += BindingProviderBase_Initialized;
                if (!tmp.IsInitialized)
                {
                    return;
                }
            }

            if (this.bindingContext == null)
            {
                return;
            }

            if (this.dataSource != null)
            {
                Bind(this.dataSource);
            }
            else
            {
                Unbind();
            }
        }
コード例 #15
0
ファイル: RadDataLayout.cs プロジェクト: RichardHaggard/BDC
        public override void EndInit()
        {
            base.EndInit();
            if (this.Site != null || this.DataSource == null)
            {
                return;
            }
            ISupportInitializeNotification dataSource = this.DataSource as ISupportInitializeNotification;

            if (dataSource != null && !dataSource.IsInitialized)
            {
                dataSource.Initialized += new EventHandler(this.supportInitializeDataSource_Initialized);
            }
            else
            {
                this.TrySubscribeControls();
            }
        }
コード例 #16
0
        private void WireDataSource()
        {
            if (this.dataSource is IComponent)
            {
                ((IComponent)this.dataSource).Disposed += new EventHandler(DataSourceDisposed);
            }
            ISupportInitializeNotification dataSource = this.dataSource as ISupportInitializeNotification;

            if ((dataSource != null) && !dataSource.IsInitialized)
            {
                dataSource.Initialized     += new EventHandler(DataSourceInitialized);
                isDataSourceInitEventHooked = true;
                isDataSourceInitialized     = false;
            }
            else
            {
                isDataSourceInitialized = true;
            }
        }
コード例 #17
0
        public void BeginInitEndInit_SetDataSourceInInit_Success(object newDataSource)
        {
            var dataSource = new ISupportInitializeNotificationDataSource {
                IsInitializedResult = false
            };

            using var bindingSource = new BindingSource(dataSource, nameof(ISupportInitializeNotificationDataSource.Member));
            ISupportInitializeNotification source = bindingSource;
            int          callCount = 0;
            EventHandler handler   = (sender, e) =>
            {
                callCount++;
                Assert.Same(source, sender);
                Assert.Equal(EventArgs.Empty, e);
            };

            source.Initialized     += handler;
            dataSource.Initialized += (sender, e) =>
            {
                ((BindingSource)source).DataSource = newDataSource;
            };

            source.BeginInit();
            Assert.False(source.IsInitialized);
            Assert.Equal(0, callCount);

            // Call the source init - should not initialize and should instead wait for
            // the data source initialization.
            source.EndInit();
            Assert.False(source.IsInitialized);
            Assert.Equal(0, callCount);

            // Then, call the data source init.
            dataSource.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(1, callCount);

            // Call again.
            source.EndInit();
            Assert.True(source.IsInitialized);
            Assert.Equal(2, callCount);
        }
コード例 #18
0
ファイル: RadListSource.cs プロジェクト: configare/hispeed
        private void Bind(object dataSource, string dataMember)
        {
            this.dataSource = dataSource;
            this.dataMember = dataMember;

            this.UnWireEvents();
            object currencyManager = this.currencyManager;

            if (this.bindingContext != null && (this.dataSource != null) && (this.dataSource != Convert.DBNull))
            {
                ISupportInitializeNotification notification = this.dataSource as ISupportInitializeNotification;

                if ((notification != null) && !notification.IsInitialized)
                {
                    notification.Initialized += new EventHandler(notification_Initialized);
                    this.currencyManager      = null;
                }
                else
                {
                    this.currencyManager = this.bindingContext[this.dataSource, this.dataMember] as System.Windows.Forms.CurrencyManager;
                    BindToEnumerable();

                    if (this.currencyManager != null)
                    {
                        this.itemType        = ListBindingHelper.GetListItemType(this.currencyManager.List);
                        this.itemConstructor = this.itemType.GetConstructor(BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance, null, new Type[0], null);
                    }
                }
            }
            else
            {
                this.currencyManager = null;
            }

            this.WireEvents();

            if (currencyManager != this.currencyManager)
            {
                Initialize();
            }
        }
コード例 #19
0
        private void Bind(object dataSource, string dataMember)
        {
            this.dataSource = dataSource;
            this.dataMember = dataMember;
            this.UnWireEvents();
            CurrencyManager currencyManager = this.currencyManager;

            if (this.bindingContext != null && this.dataSource != null && this.dataSource != Convert.DBNull)
            {
                ISupportInitializeNotification dataSource1 = this.dataSource as ISupportInitializeNotification;
                if (dataSource1 != null && !dataSource1.IsInitialized)
                {
                    dataSource1.Initialized += new EventHandler(this.notification_Initialized);
                    this.currencyManager     = (CurrencyManager)null;
                }
                else
                {
                    this.currencyManager = this.bindingContext[this.dataSource, this.dataMember] as CurrencyManager;
                    this.BindToEnumerable();
                    if (this.currencyManager != null)
                    {
                        this.itemType        = ListBindingHelper.GetListItemType((object)this.currencyManager.List);
                        this.itemConstructor = this.itemType.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance, (Binder)null, new System.Type[0], (ParameterModifier[])null);
                    }
                }
            }
            else
            {
                this.currencyManager = (CurrencyManager)null;
                if (currencyManager != null && currencyManager.List != null && currencyManager.Position >= currencyManager.List.Count)
                {
                    currencyManager.Position = -1;
                }
            }
            this.WireEvents();
            if (!this.Rebuild(currencyManager) || currencyManager == this.currencyManager)
            {
                return;
            }
            this.Initialize();
        }
コード例 #20
0
        private void DataSource_Initialized(object sender, EventArgs e)
        {
            Debug.Assert(sender == this.dataSource, "data source should not change");
            Debug.Assert(this.dataSource is ISupportInitializeNotification, "data source should not change on the BindToObject");
            Debug.Assert(this.waitingOnDataSource);

            ISupportInitializeNotification ds = this.dataSource as ISupportInitializeNotification;

            // Unhook the Initialized event.
            if (ds != null)
            {
                ds.Initialized -= new EventHandler(DataSource_Initialized);
            }

            // The wait is over: DataSource is initialized.
            this.waitingOnDataSource   = false;
            this.dataSourceInitialized = true;

            // Rebind.
            CheckBinding();
        }
コード例 #21
0
        void ISupportInitialize.EndInit()
        {
            if (datasource != null && datasource is ISupportInitializeNotification)
            {
                ISupportInitializeNotification inotif = (ISupportInitializeNotification)datasource;
                if (!inotif.IsInitialized)
                {
                    inotif.Initialized += DataSourceEndInitHandler;
                    return;
                }
            }

            is_initialized = true;
            ResetList();

            EventHandler eh = (EventHandler)Events [InitializedEvent];

            if (eh != null)
            {
                eh(this, EventArgs.Empty);
            }
        }
コード例 #22
0
        private void RefreshColumnCollection()
        {
            DataGridView component = (DataGridView)base.Component;
            ISupportInitializeNotification dataSource = component.DataSource as ISupportInitializeNotification;

            if ((dataSource == null) || dataSource.IsInitialized)
            {
                IComponentChangeService service  = null;
                PropertyDescriptor      member   = null;
                IDesignerHost           provider = base.Component.Site.GetService(typeof(IDesignerHost)) as IDesignerHost;
                if (!this.ProcessSimilarSchema(component))
                {
                    PropertyDescriptorCollection itemProperties = null;
                    if (this.cm != null)
                    {
                        try
                        {
                            itemProperties = this.cm.GetItemProperties();
                        }
                        catch (ArgumentException exception)
                        {
                            throw new InvalidOperationException(System.Design.SR.GetString("DataGridViewDataSourceNoLongerValid"), exception);
                        }
                    }
                    IContainer container = (component.Site != null) ? component.Site.Container : null;
                    service = base.Component.Site.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
                    member  = TypeDescriptor.GetProperties(base.Component)["Columns"];
                    service.OnComponentChanging(base.Component, member);
                    DataGridViewColumn[] columnArray = new DataGridViewColumn[component.Columns.Count];
                    int index = 0;
                    for (int i = 0; i < component.Columns.Count; i++)
                    {
                        DataGridViewColumn column = component.Columns[i];
                        if (!string.IsNullOrEmpty(column.DataPropertyName))
                        {
                            PropertyDescriptor descriptor2 = TypeDescriptor.GetProperties(column)["UserAddedColumn"];
                            if ((descriptor2 == null) || !((bool)descriptor2.GetValue(column)))
                            {
                                columnArray[index] = column;
                                index++;
                            }
                        }
                    }
                    for (int j = 0; j < index; j++)
                    {
                        component.Columns.Remove(columnArray[j]);
                    }
                    service.OnComponentChanged(base.Component, member, null, null);
                    if (container != null)
                    {
                        for (int m = 0; m < index; m++)
                        {
                            container.Remove(columnArray[m]);
                        }
                    }
                    DataGridViewColumn[] columnArray2 = null;
                    int num5 = 0;
                    if (component.DataSource != null)
                    {
                        columnArray2 = new DataGridViewColumn[itemProperties.Count];
                        num5         = 0;
                        for (int n = 0; n < itemProperties.Count; n++)
                        {
                            System.Type        typeofDataGridViewImageColumn;
                            DataGridViewColumn column2      = null;
                            TypeConverter      converter    = TypeDescriptor.GetConverter(typeof(Image));
                            System.Type        propertyType = itemProperties[n].PropertyType;
                            if (typeof(IList).IsAssignableFrom(propertyType))
                            {
                                if (!converter.CanConvertFrom(propertyType))
                                {
                                    continue;
                                }
                                typeofDataGridViewImageColumn = DataGridViewDesigner.typeofDataGridViewImageColumn;
                            }
                            else if ((propertyType == typeof(bool)) || (propertyType == typeof(CheckState)))
                            {
                                typeofDataGridViewImageColumn = typeofDataGridViewCheckBoxColumn;
                            }
                            else if (typeof(Image).IsAssignableFrom(propertyType) || converter.CanConvertFrom(propertyType))
                            {
                                typeofDataGridViewImageColumn = DataGridViewDesigner.typeofDataGridViewImageColumn;
                            }
                            else
                            {
                                typeofDataGridViewImageColumn = typeofDataGridViewTextBoxColumn;
                            }
                            string name = ToolStripDesigner.NameFromText(itemProperties[n].Name, typeofDataGridViewImageColumn, base.Component.Site);
                            column2 = TypeDescriptor.CreateInstance(provider, typeofDataGridViewImageColumn, null, null) as DataGridViewColumn;
                            column2.DataPropertyName = itemProperties[n].Name;
                            column2.HeaderText       = !string.IsNullOrEmpty(itemProperties[n].DisplayName) ? itemProperties[n].DisplayName : itemProperties[n].Name;
                            column2.Name             = itemProperties[n].Name;
                            column2.ValueType        = itemProperties[n].PropertyType;
                            column2.ReadOnly         = itemProperties[n].IsReadOnly;
                            provider.Container.Add(column2, name);
                            columnArray2[num5] = column2;
                            num5++;
                        }
                    }
                    service.OnComponentChanging(base.Component, member);
                    for (int k = 0; k < num5; k++)
                    {
                        columnArray2[k].DisplayIndex = -1;
                        component.Columns.Add(columnArray2[k]);
                    }
                    service.OnComponentChanged(base.Component, member, null, null);
                }
            }
        }