Attention: We are retiring the ASP.NET Community Blogs. Learn more >

DataBinding, BindingContext and BindingManagers

I have spent the past 2 days trying to figure all of this out.  Our app DataBinds to many data sources, all ADO.NET types.  Mostly from one dataset, but in some cases, like our drop downs that load from a code table, they are not related. 

So, to do an Update or an Insert, one needs to call EndCurrentEdit on the BindingManager.  This propagates the changes to the DataSet.  Well, when there are numerous BindingManagers it would be nice to loop through all of them and call EndCurrentEdit on each.  Easy enough, Forms BindingContext Implements IEnumerable and Collection.  Hard enough though, as it's Hidden, or not meant to be used from code.

So, a dirty work around is this.  When the user clicks Save, in our case this can be for an Insert or an Update, we do this:

                Dim de As DictionaryEntry
                For Each de In Me.BindingContext
                    Dim we As WeakReference
                    we = de.Value
                    If we.IsAlive Then
                        Dim cm As CurrencyManager
                        cm = we.Target
                        cm.EndCurrentEdit()
                    End If
                Next

This will propagate user modifications to the DataSource, which, in our case is a DataSet.  We push the DataSet changes across to a Data Tier and life is good.

I initially tried setting up this loop with a BindingManagerBase type, then a CurrencyManager type, both of which threw an InvalidCastException.  Anyone know why one cannot loop through BindingContext with a BindingManagerBase Type?  The above works, but sure seems like a hack to me.

3 Comments

Comments have been disabled for this content.