public static object GetList(object dataSource, string dataMember) { dataSource = GetList(dataSource); if (dataSource == null || dataMember == null || dataMember.Length == 0) { return(dataSource); } PropertyDescriptor property = GetListItemProperties(dataSource).Find(dataMember, true); if (property == null) { throw new ArgumentException("dataMember"); } object item = null; #if NET_2_0 ICurrencyManagerProvider currencyManagerProvider = dataSource as ICurrencyManagerProvider; if (currencyManagerProvider != null && currencyManagerProvider.CurrencyManager != null) { CurrencyManager currencyManager = currencyManagerProvider.CurrencyManager; if (currencyManager != null && currencyManager.Count > 0 && currencyManager.Current != null) { item = currencyManager.Current; } } #endif if (item == null) { if (dataSource is IEnumerable) { if (dataSource is IList) { IList list = (IList)dataSource; item = list.Count > 0 ? list[0] : null; } else { IEnumerator e = ((IEnumerable)dataSource).GetEnumerator(); if (e != null && e.MoveNext()) { item = e.Current; } } } else { item = dataSource; } } if (item != null) { return(property.GetValue(item)); } return(null); }
private void DisconnectDataSourceEvents(object dataSource) { if (dataSource == null) { return; } ICurrencyManagerProvider currencyManagerProvider = dataSource as ICurrencyManagerProvider; if (currencyManagerProvider != null && currencyManagerProvider.CurrencyManager != null) { currencyManagerProvider.CurrencyManager.CurrentItemChanged -= OnParentCurrencyManagerChanged; currencyManagerProvider.CurrencyManager.MetaDataChanged -= OnParentCurrencyManagerChanged; } }
/// <summary> /// RegisterControlEvents() registers all the relevant events for the container control supplied and also to all child controls /// in the oontainer control. /// </summary> /// <param name="container">The control (including child controls) to have the refresh events registered.</param> /// <param name="register">True to register the events, false to unregister them.</param> private void RegisterControlEvents(ICurrencyManagerProvider container, bool register) { var currencyManager = container.CurrencyManager; // If we are to register the events the do so. if (register) { currencyManager.Bindings.CollectionChanged += Bindings_CollectionChanged; currencyManager.Bindings.CollectionChanging += Bindings_CollectionChanging; } // Else unregister them. else { currencyManager.Bindings.CollectionChanged -= Bindings_CollectionChanged; currencyManager.Bindings.CollectionChanging += Bindings_CollectionChanging; } // Reigster the binding complete events for the currencymanagers bindings. RegisterBindingEvents(currencyManager.Bindings, register); }
public BindingManagerBase this [object dataSource, string dataMember] { get { if (dataSource == null) { throw new ArgumentNullException("dataSource"); } if (dataMember == null) { dataMember = String.Empty; } #if NET_2_0 ICurrencyManagerProvider cm_provider = dataSource as ICurrencyManagerProvider; if (cm_provider != null) { if (dataMember.Length == 0) { return(cm_provider.CurrencyManager); } return(cm_provider.GetRelatedCurrencyManager(dataMember)); } #endif HashKey key = new HashKey(dataSource, dataMember); BindingManagerBase res = managers [key] as BindingManagerBase; if (res != null) { return(res); } res = CreateBindingManager(dataSource, dataMember); if (res == null) { return(null); } managers [key] = res; return(res); } }