There are two sets of rules to consider: edit level, and data binding.
The edit level rules are pretty straightforward. For each BeginEdit() on an object, you must call CancelEdit() or ApplyEdit() on that object before calling any of those three methods on the object's parent (or grandparent, etc).
In other words, each level of editing for an object must be resolved before its parents go mucking around with their edit levels.
Similarly, the data binding rules are pretty simple. If an object is bound, it will have an elevated edit level. Period. The BindingSource control ensures that a bound object will have BeginEdit() called at all times, so the object is always in "edit mode".
So the only way to get an object's edit level reduced is to unbind it, and then call CancelEdit() or ApplyEdit(), because as long as it is bound you can't reduce the edit level.
Where this gets tricky is in the interaction between the edit level rules and the data binding rules, and that's where the content in the Using CSLA .NET 3.0 ebook (or the old threads on this topic) are invaluable.
Or you can use the CslaActionExtender in CSLA .NET 3.6 to do the work for you, which is probably a better option if it is available to you.
Copyright (c) Marimer LLC