Author: jackson
Date: 2006-04-17 17:55:17 -0400 (Mon, 17 Apr 2006)
New Revision: 59547

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs
Log:

        * Binding.cs: Handle null values for Current and BindingContext.
        This occurs when binding is a little delayed.
        * CurrencyManager.cs: return null for Current when there are no
        items in the list.
        - Hookup to the listchanged event on the DataView and update
        bindings when the list is changed.  This fixes late binding of
        controls.



Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs       
2006-04-17 18:41:27 UTC (rev 59546)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Binding.cs       
2006-04-17 21:55:17 UTC (rev 59547)
@@ -149,13 +149,17 @@
 
                internal void Check (BindingContext binding_context)
                {
-                       if (control == null)
+                       if (control == null || control.BindingContext == null)
                                return;
 
                        string member_name = data_member;
                        if (row_name != null)
                                member_name = row_name;
+
+                       Console.WriteLine ("data source  {0}   member name:  
{1}",
+                                       data_source, member_name);
                        manager = control.BindingContext [data_source, 
member_name];
+
                        manager.AddBinding (this);
                        manager.PositionChanged += new EventHandler 
(PositionChangedHandler);
 
@@ -178,7 +182,7 @@
 
                internal void PullData ()
                {
-                       if (IsBinding == false)
+                       if (IsBinding == false || manager.Current == null)
                                return;
 
                        if (is_null_desc != null) {
@@ -237,6 +241,8 @@
 
                private void WirePropertyValueChangedEvent ()
                {
+                       if (manager.Current == null)
+                               return;
                        EventDescriptor changed_event = 
TypeDescriptor.GetEvents (manager.Current).Find (property_name + "Changed", 
false);
                        if (changed_event == null)
                                return;

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2006-04-17 18:41:27 UTC (rev 59546)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2006-04-17 21:55:17 UTC (rev 59547)
@@ -1,5 +1,15 @@
 2006-04-17  Jackson Harper  <[EMAIL PROTECTED]>
 
+       * Binding.cs: Handle null values for Current and BindingContext.
+       This occurs when binding is a little delayed.
+       * CurrencyManager.cs: return null for Current when there are no
+       items in the list.
+       - Hookup to the listchanged event on the DataView and update
+       bindings when the list is changed.  This fixes late binding of
+       controls.
+
+2006-04-17  Jackson Harper  <[EMAIL PROTECTED]>
+
        * X11Dnd.cs:
        * XplatUIX11.cs: Drops should not create a mousedown. Patch by Tim
        Ringenbach.

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs   
    2006-04-17 18:41:27 UTC (rev 59546)
+++ 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CurrencyManager.cs   
    2006-04-17 21:55:17 UTC (rev 59547)
@@ -78,6 +78,7 @@
 
                        if (table != null) {
                                list = new DataView (table);
+                               ((DataView) list).ListChanged += new 
ListChangedEventHandler (ListChangedHandler);
                                table.Columns.CollectionChanged  += new 
CollectionChangeEventHandler (MetaDataChangedHandler);
                                table.ChildRelations.CollectionChanged  += new 
CollectionChangeEventHandler (MetaDataChangedHandler);
                                table.ParentRelations.CollectionChanged  += new 
CollectionChangeEventHandler (MetaDataChangedHandler);
@@ -91,6 +92,8 @@
 
                public override object Current {
                        get {
+                               if (list.Count == 0)
+                                       return null;
                                return list [listposition];
                        }
                }
@@ -261,7 +264,6 @@
                        return String.Empty;
                }
 
-               [MonoTODO ("Not totally sure how this works, its doesn't seemt 
to do a pull/push like i originally assumed")]
                protected override void UpdateIsBinding ()
                {
                        UpdateItem ();
@@ -294,6 +296,11 @@
                                MetaDataChanged (this, EventArgs.Empty);
                }
 
+               private void ListChangedHandler (object sender, 
ListChangedEventArgs e)
+               {
+                       UpdateIsBinding ();
+               }
+
                public event ItemChangedEventHandler ItemChanged;
                public event EventHandler MetaDataChanged;
        }

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

Reply via email to