Author: jackson
Date: 2005-03-04 05:32:17 -0500 (Fri, 04 Mar 2005)
New Revision: 41431

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
Log:
        * Binding.cs: Support <Property>IsNull checks. Also bind to the
        controls Validating method so we can repull the data when the
        control loses focus.



Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs       
2005-03-04 08:52:39 UTC (rev 41430)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs       
2005-03-04 10:32:17 UTC (rev 41431)
@@ -40,6 +40,7 @@
 
                private BindingManagerBase manager;
                private PropertyDescriptor prop_desc;
+               private PropertyDescriptor is_null_desc;
                private object data;
 
                private EventDescriptor changed_event;
@@ -123,6 +124,9 @@
                                throw new ArgumentException (String.Concat 
("Cannot bind to property '", property_name, "' on target control."));
                        if (prop_desc.IsReadOnly)
                                throw new ArgumentException (String.Concat 
("Cannot bind to property '", property_name, "' because it is read only."));
+
+                       control.Validating += new CancelEventHandler 
(ControlValidatingHandler);
+
                        this.control = control;
                }
 
@@ -136,6 +140,8 @@
 
                        WirePropertyValueChangedEvent ();
 
+                       is_null_desc = TypeDescriptor.GetProperties 
(manager.Current).Find (property_name + "IsNull", false);
+
                        PullData ();
                        PushData ();
                }
@@ -147,6 +153,14 @@
 
                internal void PullData ()
                {
+                       if (is_null_desc != null) {
+                               bool is_null = (bool) is_null_desc.GetValue 
(manager.Current);
+                               if (is_null) {
+                                       data = Convert.DBNull;
+                                       return;
+                               }
+                       }
+
                        PropertyDescriptor pd = TypeDescriptor.GetProperties 
(manager.Current).Find (data_member, true);
                        data = pd.GetValue (manager.Current);
                }
@@ -181,6 +195,11 @@
                        PushData ();
                }
 
+               private void ControlValidatingHandler (object sender, 
CancelEventArgs e)
+               {
+                       PullData ();
+               }
+
                #region Events
                public event ConvertEventHandler Format;
                public event ConvertEventHandler Parse;

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2005-03-04 08:52:39 UTC (rev 41430)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2005-03-04 10:32:17 UTC (rev 41431)
@@ -1,3 +1,9 @@
+2005-03-04  Jackson Harper  <[EMAIL PROTECTED]>
+
+       * Binding.cs: Support <Property>IsNull checks. Also bind to the
+       controls Validating method so we can repull the data when the
+       control loses focus.
+
 2005-03-03  Jordi Mas i Hernandez <[EMAIL PROTECTED]>
 
        * ColumnHeader.cs:

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to