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);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
            }
        }
 /// <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);
 }