//
using System;
+using System.Data;
using System.Reflection;
using System.Collections;
using System.ComponentModel;
protected int listposition;
private IList list;
- private IBindingList binding_list;
-
private bool binding_suspended;
internal CurrencyManager (object data_source)
- {
- binding_list = data_source as IBindingList;
+ {
if (data_source is IListSource) {
list = ((IListSource) data_source).GetList ();
} else if (data_source is IList) {
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; }
internal override bool IsSuspended {
get { return binding_suspended; }
}
+
+ internal bool CanAddRows {
+ get {
+ if (list as IBindingList == null) {
+ return false;
+ }
+
+ return true;
+ }
+ }
public override void AddNew ()
{
- if (binding_list == null)
+ if (list as IBindingList == null)
throw new NotSupportedException ();
- binding_list.AddNew ();
+
+ (list as IBindingList).AddNew ();
}
public override void CancelCurrentEdit ()
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 ();
internal object GetItem (int index)
{
return list [index];
- }
-
+ }
+
private PropertyDescriptorCollection GetBrowsableProperties (Type t)
{
Attribute [] att = new System.Attribute [1];
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;
}
}