Make a copy of the old ZipLib
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / CurrencyManager.cs
index cc97a15c610ec73caa38a9908851dedba77bfc83..23a214175fd57e569c280a09ed0d1f9dc2ef3995 100644 (file)
@@ -24,6 +24,7 @@
 //
 
 using System;
+using System.Data;
 using System.Reflection;
 using System.Collections;
 using System.ComponentModel;
@@ -58,7 +59,18 @@ namespace System.Windows.Forms {
                                        finalType = null;
                                }
                        }
-               }               
+
+                       DataTable table = data_source as DataTable;
+                       if (table == null && data_source is DataView)
+                               table = ((DataView) data_source).Table;
+
+                       if (table != null) {
+                               table.Columns.CollectionChanged  += new CollectionChangeEventHandler (MetaDataChangedHandler);
+                               table.ChildRelations.CollectionChanged  += new CollectionChangeEventHandler (MetaDataChangedHandler);
+                               table.ParentRelations.CollectionChanged  += new CollectionChangeEventHandler (MetaDataChangedHandler);
+                               table.Constraints.CollectionChanged += new CollectionChangeEventHandler (MetaDataChangedHandler);
+                       }
+               }
 
                public IList List {
                        get { return list; }
@@ -189,6 +201,19 @@ namespace System.Windows.Forms {
                        editable.EndEdit ();
                }
 
+               public void Refresh ()
+               {
+                       PullData ();
+               }
+
+               [MonoTODO ("This is just a guess, as I can't figure out how to test this method")]
+               protected void CheckEmpty ()
+               {
+                       if (list == null || list.Count < 1)
+                               throw new Exception ("List is empty.");
+                               
+               }
+
                protected internal override void OnCurrentChanged (EventArgs e)
                {
                        PullData ();
@@ -251,7 +276,14 @@ namespace System.Windows.Forms {
                        return TypeDescriptor.GetProperties (t, att);
                }
 
+               private void MetaDataChangedHandler (object sender, CollectionChangeEventArgs e)
+               {
+                       if (MetaDataChanged != null)
+                               MetaDataChanged (this, EventArgs.Empty);
+               }
+
                public event ItemChangedEventHandler ItemChanged;
+               public event EventHandler MetaDataChanged;
        }
 }