Pastebin launched a little side project called HostCabi.net, check it out ;-)Don't like ads? PRO users don't see any ads ;-)
Guest

why GetChanges returns something (when bound to a property) even if there are no changes on datatable

By: a guest on Feb 27th, 2012  |  syntax: None  |  size: 3.99 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. public partial class Form1 : Form
  2. {
  3.  
  4.     DataSet _ds = new DataSet();
  5.  
  6.     void GetData()
  7.     {          
  8.         var t = new DataTable
  9.         {
  10.             TableName = "beatles",
  11.             Columns =
  12.             {
  13.                 {"lastname", typeof(string)},
  14.                 {"firstname", typeof(string)},
  15.                 {"middlename", typeof(string)}
  16.             }
  17.         };
  18.  
  19.  
  20.         t.Rows.Add("Lennon", "John", "Winston");
  21.         t.Rows.Add("McCartney", "James", "Paul");
  22.  
  23.         _ds.Tables.Add(t);            
  24.     }
  25.  
  26.     public string Hey { set; get; }
  27.  
  28.     public Form1()
  29.     {
  30.         InitializeComponent();
  31.  
  32.         var tLastname = new TextBox { Top = 100 };
  33.         var tFirstname = new TextBox { Top = 130 };
  34.  
  35.         this.Controls.Add(tLastname);
  36.         this.Controls.Add(tFirstname);
  37.  
  38.         GetData();
  39.  
  40.  
  41.         tLastname.DataBindings.Add("Text", _ds.Tables["beatles"], "lastname");
  42.         tFirstname.DataBindings.Add("Text", _ds.Tables["beatles"], "firstname");
  43.  
  44.         // if the following line is commented 2nd:Has Changes == false
  45.         this.DataBindings.Add("Hey", _ds.Tables["beatles"], "middlename");
  46.  
  47.  
  48.         _ds.AcceptChanges();
  49.  
  50.  
  51.         MessageBox.Show("1st:Has Changes = " + _ds.HasChanges().ToString());
  52.  
  53.         var bDetectChanges = new Button { Top = 160, Text = "Detect Changes" };
  54.         bDetectChanges.Click +=
  55.             delegate
  56.             {
  57.                 this.BindingContext[_ds.Tables["beatles"]].EndCurrentEdit();
  58.                 MessageBox.Show("2nd:Has Changes = " +  (_ds.GetChanges() != null).ToString());
  59.             };
  60.  
  61.         this.Controls.Add(bDetectChanges);
  62.  
  63.     }    
  64. }
  65.        
  66. public partial class Form1 : Form, System.ComponentModel.INotifyPropertyChanged
  67. {
  68.     //----------- implements INotifyPropertyChanged -----------
  69.  
  70.  
  71.     // wish C# has this VB.NET's syntactic sugar
  72.     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; // implements INotifyPropertyChanged.PropertyChanged
  73.  
  74.     //----------- start of Form1  ----------
  75.  
  76.  
  77.     DataSet _ds = new DataSet();
  78.  
  79.  
  80.  
  81.     void NotifyPropertyChanged(string propertyName)
  82.     {
  83.         if (PropertyChanged != null)
  84.             PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
  85.     }
  86.  
  87.  
  88.  
  89.     void GetData()
  90.     {
  91.  
  92.         var t = new DataTable
  93.         {
  94.             TableName = "beatles",
  95.             Columns =
  96.             {
  97.                 {"lastname", typeof(string)},
  98.                 {"firstname", typeof(string)},
  99.                 {"middlename", typeof(string)}
  100.             }
  101.         };
  102.  
  103.  
  104.         t.Rows.Add("Lennon", "John", "Winston");
  105.         t.Rows.Add("McCartney", "James", "Paul");
  106.  
  107.         t.Columns["middlename"].DefaultValue = "";
  108.  
  109.         _ds.Tables.Add(t);            
  110.     }
  111.  
  112.  
  113.  
  114.     string _hey = "";
  115.     public string Hey
  116.     {
  117.         set
  118.         {
  119.             if (value != _hey)
  120.             {
  121.                 _hey = value;
  122.                 NotifyPropertyChanged("Hey");
  123.             }
  124.         }
  125.         get
  126.         {                
  127.  
  128.             return _hey;  
  129.         }
  130.     }
  131.  
  132.  
  133.  
  134.     public Form1()
  135.     {
  136.         InitializeComponent();
  137.  
  138.  
  139.  
  140.         var tLastname = new TextBox { Top = 100 };
  141.         var tFirstname = new TextBox { Top = 130 };
  142.  
  143.         this.Controls.Add(tLastname);
  144.         this.Controls.Add(tFirstname);
  145.  
  146.         GetData();
  147.  
  148.  
  149.  
  150.         tLastname.DataBindings.Add("Text", _ds.Tables["beatles"], "lastname");
  151.         tFirstname.DataBindings.Add("Text", _ds.Tables["beatles"], "firstname");
  152.  
  153.         this.DataBindings.Add("Hey", _ds.Tables["beatles"], "middlename");
  154.  
  155.  
  156.         _ds.AcceptChanges();
  157.  
  158.  
  159.  
  160.  
  161.         MessageBox.Show("1st:Has Changes = " + _ds.HasChanges().ToString());
  162.  
  163.         var bDetectChanges = new Button { Top = 160, Text = "Detect Changes" };
  164.         bDetectChanges.Click +=
  165.             delegate
  166.             {
  167.                 this.BindingContext[_ds.Tables["beatles"]].EndCurrentEdit();
  168.                 MessageBox.Show("2nd:Has Changes = " + (_ds.GetChanges() != null).ToString());
  169.  
  170.             };
  171.  
  172.         this.Controls.Add(bDetectChanges);
  173.  
  174.     }
  175.  
  176. }