* XplatUIX11.cs: Removed unused hwnd var in SetBorderStyle.
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ControlBindingsCollection.cs
index 1539b078a1522b3e8c5e6955b2d5b97a24d3799d..913744aacd60521178f62eed7ae3ad915fcbd8f7 100644 (file)
 using System;
 using System.Collections;
 using System.ComponentModel;
+using System.Reflection;
 
 
 namespace System.Windows.Forms {
-
+       [DefaultEvent("CollectionChanged")]
+       [Editor("System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing, typeof(System.Drawing.Design.UITypeEditor))]
+       [TypeConverter("System.Windows.Forms.Design.ControlBindingsConverter, " + Consts.AssemblySystem_Design)]
        public class ControlBindingsCollection : BindingsCollection {
-
+               #region Fields
                private Control control;
+               #endregion      // Fields
 
-               internal ControlBindingsCollection (Control control)
-               {
+               #region Constructors
+               internal ControlBindingsCollection (Control control) {
                        this.control = control;
                }
+               #endregion      // Constructors
 
+               #region Public Instance Properties
+               public Control Control {
+                       get {
+                               return control;
+                       }
+               }
+
+               public Binding this[string propertyName] {
+                       get {
+                               foreach (Binding b in base.List) {
+                                       if (b.PropertyName == propertyName) {
+                                               return b;
+                                       }
+                               }
+                               return null;
+                       }
+               }
+               #endregion      // Public Instance Properties
+
+               #region Public Instance Methods
                public new void Add (Binding binding)
                {
                        AddCore (binding);
@@ -47,11 +72,37 @@ namespace System.Windows.Forms {
 
                public Binding Add (string property_name, object data_source, string data_member)
                {
+                       if (data_source == null) {
+                               throw new ArgumentNullException ("DataSource cannot be null.");
+                       }                       
+                       
                        Binding res = new Binding (property_name, data_source, data_member);
                        Add (res);
                        return res;
                }
 
+               public new void Clear() {
+                       base.Clear();
+               }
+
+               public new void Remove(Binding binding) {
+                       if (binding == null) {
+                               throw new NullReferenceException("The binding is null");
+                       }
+
+                       base.Remove(binding);
+               }
+
+               public new void RemoveAt(int index) {
+                       if (index < 0 || index >= base.List.Count) {
+                               throw new ArgumentOutOfRangeException("index");
+                       }
+
+                       base.RemoveAt(index);
+               }
+               #endregion      // Public Instance Methods
+
+               #region Protected Instance Methods
                protected override void AddCore (Binding binding)
                {
                        if (binding == null)
@@ -59,10 +110,35 @@ namespace System.Windows.Forms {
 
                        if (binding.Control != null && binding.Control != control)
                                  throw new ArgumentException ("dataBinding belongs to another BindingsCollection");
+                                 
+                       for (int i = 0; i < Count; i++) {
+                               Binding bnd = this [i];
+                               if (bnd == null || bnd.PropertyName.Length == 0 || binding.PropertyName.Length == 0) {
+                                       continue;
+                               }
+
+                               if (String.Compare (bnd.PropertyName, binding.PropertyName, true) == 0) {
+                                       throw new ArgumentException ("The binding is already in the collection");
+                               }
+                       }
 
                        binding.SetControl (control);
+                       binding.Check (control.BindingContext);
                        base.AddCore (binding);
                }
+
+               protected override void ClearCore() {
+                       base.ClearCore ();
+               }
+
+               protected override void RemoveCore(Binding dataBinding) {
+                       if (dataBinding == null) {
+                               throw new ArgumentNullException ("dataBinding");
+                       }
+
+                       base.RemoveCore (dataBinding);
+               }
+               #endregion      // Protected Instance Methods
        }
 }