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