/// <summary> /// Unbinds the binding source and the Data object. Use this Method to safely disconnect the data object from a BindingSource before saving data. /// </summary> /// <param name="source">The source.</param> /// <param name="cancel">if set to <c>true</c> then call CancelEdit else call EndEdit.</param> /// <param name="isRoot">if set to <c>true</c> this BindingSource contains the Root object. Set to <c>false</c> for nested BindingSources</param> public static void UnbindBindingSource(BindingSource source, bool cancel, bool isRoot) { IEditableObject current = null; // position may be -1 if bindigsource is already unbound which results in Exception when trying to address current if ((source.DataSource != null) && (source.Position > -1)) { current = source.Current as IEditableObject; } // set Raise list changed to True source.RaiseListChangedEvents = false; // tell currency manager to suspend binding source.SuspendBinding(); if (isRoot) source.DataSource = null; if (current == null) return; if (cancel) { current.CancelEdit(); } else { current.EndEdit(); } }