/// <summary>
        /// Save N-Level Parent-Child Relations
        /// </summary>
        /// <param name="rootBusinessObject"></param>
        /// <param name="bindingSourceRootNode"></param>
        /// <param name="rebind"></param>
        public override void SaveBO(object rootBusinessObject, BindingSourceNode bindingSourceRootNode, bool rebind)
        {
            Debug.Assert(rootBusinessObject != null, "rootBusinessObject is null");
            Debug.Assert(bindingSourceRootNode != null, "bindingSourceNode is null");

            // disable events and unbind the business object
            ClearBindings(bindingSourceRootNode, true);

            try
            {
                rootBusinessObject = ((ISavable)rootBusinessObject).Save();
            }
            catch (DataPortalException ex)
            {
                EvaluateDataPortalException(ex);
                throw;
            }
            finally
            {
                if (rebind)
                {
                    // rebind UI
                    BindBO(rootBusinessObject, bindingSourceRootNode.BindingSource);

                    // restore events and refresh UI
                    RestoreBindings(bindingSourceRootNode, false);
                }
            }
        }
 private void NodeDataSource(BindingSourceNode bindingSourceNode)
 {
     foreach (BindingSourceNode bindingSourceNodeChild in bindingSourceNode.BindingSourceChilds)
     {
         NodeDataSource(bindingSourceNodeChild);
         bindingSourceNodeChild.BindingSource.DataSource = bindingSourceNode.BindingSource;
     }
 }
        public void RestoreBindings(BindingSourceNode bindingSourceRootNode, bool forceUpdate)
        {
            Debug.Assert(bindingSourceRootNode != null, "bindingSourceNode darf nicht null sein");
            Debug.Assert(bindingSourceRootNode.IsRoot, "bindingSourceNode muss IsRoot sein");

            NodeDataSource(bindingSourceRootNode);
            NodeRaiseListChangedEvents(bindingSourceRootNode, true);
            NodeResetBindings(bindingSourceRootNode, forceUpdate);
        }
        public void ClearBindings(BindingSourceNode bindingSourceRootNode, bool apply)
        {
            Debug.Assert(bindingSourceRootNode != null, "bindingSourceNode darf nicht null sein");
            Debug.Assert(bindingSourceRootNode.IsRoot, "bindingSourceNode muss IsRoot sein");

            NodeRaiseListChangedEvents(bindingSourceRootNode, false);
            NodeUnbind(bindingSourceRootNode, apply);
            NodeDataSource(bindingSourceRootNode);
        }
Esempio n. 5
0
        /// <summary>
        /// Add Child Nodes
        /// To add Childs to a Masterchild, get the Masterchild node with this command:
        /// rootNodename[bindingSourceXY].AddChild...
        /// </summary>
        /// <param name="bindingSource"></param>
        public BindingSourceNode AddChild(BindingSource bindingSource)
        {
            var newBindingSourceNode = new BindingSourceNode(bindingSource);

            newBindingSourceNode.IsRoot = false;
            _bindingSourceChilds.Add(newBindingSourceNode);

            return(newBindingSourceNode);
        }
        private void NodeResetBindings(BindingSourceNode bindingSourceNode, bool forceUpdate)
        {
            bindingSourceNode.BindingSource.ResetBindings(forceUpdate);

            // Für alle Childs
            foreach (BindingSourceNode bindingSourceNodeChild in bindingSourceNode.BindingSourceChilds)
            {
                NodeResetBindings(bindingSourceNodeChild, forceUpdate);
            }
        }
        private void NodeRaiseListChangedEvents(BindingSourceNode bindingSourceNode, bool raise)
        {
            bindingSourceNode.BindingSource.RaiseListChangedEvents = raise;

            // Für alle Childs
            foreach (BindingSourceNode bindingSourceNodeChild in bindingSourceNode.BindingSourceChilds)
            {
                NodeRaiseListChangedEvents(bindingSourceNodeChild, raise);
            }
        }
        private void NodeUnbind(BindingSourceNode bindingSourceNode, bool apply)
        {
            // unbind the UI, child binding sources first
            foreach (BindingSourceNode bindingSourceNodeChild in bindingSourceNode.BindingSourceChilds)
            {
                NodeUnbind(bindingSourceNodeChild, apply);
            }

            UnbindBO(bindingSourceNode.BindingSource, apply, bindingSourceNode.IsRoot);
        }
Esempio n. 9
0
        /// <summary>
        /// Get a node via the nodes Bindingsource
        /// </summary>
        /// <param name="bindingSource">Get node with this BindingSource</param>
        /// <returns>Node that contains this bindingSource, could be null</returns>
        public BindingSourceNode this[BindingSource bindingSource]
        {
            get
            {
                BindingSourceNode res = null;

                foreach (BindingSourceNode node in BindingSourceChilds)
                {
                    if (node.BindingSource == bindingSource)
                    {
                        res = node;
                        break;
                    }
                }

                Debug.Assert(res != null, "BindingSource not in Child List");

                return(res);
            }
        }
Esempio n. 10
0
 public abstract void SaveBO(object rootBusinessObject, BindingSourceNode bindingSourceNode, bool rebind);
 public override void SaveBO(object rootBusinessObject, BindingSourceNode bindingSourceRootNode, bool rebind)
 {
     throw new NotImplementedException("Not allowed in BindingManagerReadOnly");
 }