private void SetDataConnection(object newDataSource, BindingMemberInfo newDisplayMember, bool force) { bool dataSourceChanged = dataSource != newDataSource; bool displayMemberChanged = !displayMember.Equals(newDisplayMember); // make sure something interesting is happening... // //force = force && (dataSource != null || newDataSource != null); if (force || dataSourceChanged || displayMemberChanged) { // 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)dataSource).Disposed -= new EventHandler(DataSourceDisposed); } dataSource = newDataSource; displayMember = newDisplayMember; if (this.dataSource is IComponent) { ((IComponent)dataSource).Disposed += new EventHandler(DataSourceDisposed); } CurrencyManager newDataManager = null; if (newDataSource != null && BindingContext != null && !(newDataSource == Convert.DBNull)) { newDataManager = (CurrencyManager)BindingContext[newDataSource, newDisplayMember.BindingPath]; } if (dataManager != newDataManager) { if (dataManager != null) { dataManager.ItemChanged -= new ItemChangedEventHandler(DataManager_ItemChanged); dataManager.PositionChanged -= new EventHandler(DataManager_PositionChanged); } dataManager = newDataManager; if (dataManager != null) { dataManager.ItemChanged += new ItemChangedEventHandler(DataManager_ItemChanged); dataManager.PositionChanged += new EventHandler(DataManager_PositionChanged); } } // See if the BindingField in the newDisplayMember is valid // The same thing if dataSource Changed // "" is a good value for displayMember if (dataManager != null && (displayMemberChanged || dataSourceChanged) && !"".Equals(displayMember.BindingMember)) { if (!BindingMemberInfoInDataManager(displayMember)) { throw new ArgumentException(SR.GetString(SR.ListControlWrongDisplayMember), "newDisplayMember"); } } if (dataManager != null && (dataSourceChanged || displayMemberChanged || force)) { DataManager_ItemChanged(dataManager, new ItemChangedEventArgs(-1)); } } if (dataSourceChanged) { OnDataSourceChanged(EventArgs.Empty); } if (displayMemberChanged) { OnDisplayMemberChanged(EventArgs.Empty); } }
private void SetDataConnection(object newDataSource, BindingMemberInfo newDisplayMember, bool force) { bool dataSourceChanged = dataSource != newDataSource; bool displayMemberChanged = !displayMember.Equals(newDisplayMember); // make sure something interesting is happening... // //force = force && (dataSource != null || newDataSource != null); if (inSetDataConnection) { return; } try { if (force || dataSourceChanged || displayMemberChanged) { inSetDataConnection = true; IList currentList = this.DataManager != null ? this.DataManager.List : null; bool currentManagerIsNull = this.DataManager == null; UnwireDataSource(); dataSource = newDataSource; displayMember = newDisplayMember; WireDataSource(); // Provided the data source has been fully initialized, start listening to change events on its // currency manager and refresh our list. If the data source has not yet been initialized, we will // skip this step for now, and try again later (once the data source has fired its Initialized event). // if (isDataSourceInitialized) { CurrencyManager newDataManager = null; if (newDataSource != null && BindingContext != null && !(newDataSource == Convert.DBNull)) { newDataManager = (CurrencyManager)BindingContext[newDataSource, newDisplayMember.BindingPath]; } if (dataManager != newDataManager) { if (dataManager != null) { dataManager.ItemChanged -= new ItemChangedEventHandler(DataManager_ItemChanged); dataManager.PositionChanged -= new EventHandler(DataManager_PositionChanged); } dataManager = newDataManager; if (dataManager != null) { dataManager.ItemChanged += new ItemChangedEventHandler(DataManager_ItemChanged); dataManager.PositionChanged += new EventHandler(DataManager_PositionChanged); } } // See if the BindingField in the newDisplayMember is valid // The same thing if dataSource Changed // "" is a good value for displayMember if (dataManager != null && (displayMemberChanged || dataSourceChanged) && displayMember.BindingMember != null && displayMember.BindingMember.Length != 0) { if (!BindingMemberInfoInDataManager(displayMember)) { throw new ArgumentException(SR.ListControlWrongDisplayMember, "newDisplayMember"); } } if (dataManager != null && (dataSourceChanged || displayMemberChanged || force)) { // if we force a new data manager, then change the items in the list control // only if the list changed or if we go from a null dataManager to a full fledged one // or if the DisplayMember changed if (displayMemberChanged || (force && (currentList != this.dataManager.List || currentManagerIsNull))) { DataManager_ItemChanged(dataManager, new ItemChangedEventArgs(-1)); } } } this.displayMemberConverter = null; } if (dataSourceChanged) { OnDataSourceChanged(EventArgs.Empty); } if (displayMemberChanged) { OnDisplayMemberChanged(EventArgs.Empty); } } finally { inSetDataConnection = false; } }
public void EqualsTest () { BindingMemberInfo a = new BindingMemberInfo ("A.B.C"); BindingMemberInfo b = new BindingMemberInfo ("A.B.C"); Assert.AreEqual (a, b, "EQUALS1"); b = new BindingMemberInfo ("A.B"); Assert.IsFalse (a.Equals (b), "EQUALS2"); }