Bound GetChanges always returns something when bound to a usercontrol's property (even on a simple one)
i have made a usercontrol, for some reason unknownst to me, when i bound a datacolumn to my control's property the dataSet1.GetChanges() always return something, even the column bound to my control was not changed.
what's the possible cause why GetChanges always return something?
here's a simple snippet to reproduce the binding/GetChanges problem:
using System;
using System.Data;
using System.Windows.Forms;
namespace BindingBug {
public partial class Form1 : Form
{
DataSet _ds = new DataSet();
void GetData()
{
var t = new DataTable
{
TableName = "beatles",
Columns =
{
{"lastname", typeof(string)},
{"firstname", typeof(string)},
{"middlename", typeof(string)}
}
};
t.Rows.Add("Lennon", "John", "Winston");
t.Rows.Add("McCartney", "James", "Paul");
_ds.Tables.Add(t);
}
public string Hey { set; get; }
public Form1()
{
InitializeComponent();
var tLastname = new TextBox { Top = 100 };
var tFirstname = new TextBox { Top = 130 };
this.Controls.Add(tLastname);
this.Controls.Add(tFirstname);
GetData();
tLastname.DataBindings.Add("Text", _ds.Tables["beatles"], "lastname");
tFirstname.DataBindings.Add("Text", _ds.Tables["beatles"], "firstname");
// if the following line is commented 2nd:Has Changes == false
this.DataBindings.Add("Hey", _ds.Tables["beatles"], "middlename");
_ds.AcceptChanges();
MessageBox.Show("1st:Has Changes = " + _ds.HasChanges().ToString());
var bDetectChanges = new Button { Top = 160, Text = "Detect Changes" };
bDetectChanges.Click +=
delegate
{
this.BindingContext[_ds.Tables["beatles"]].EndCurrentEdit();
MessageBox.Show("2nd:Has Changes = " + (_ds.GetChanges() != null).ToString());
};
this.Controls.Add(bDetectChanges);
}
}
} //namespace BindingBug