#眉標=.Net #副標=Bussiness Object Designing of Windows Forms(1) #大標=.NET Framework 2.0與Business Object的撰寫 #作者=文/黃忠成 -----box 程式----- 程式1 using System; using System.ComponentModel; using System.Collections.Generic; using System.Text; namespace UsingBindingSource { public class MyDataObject { private string _name; private int _age; public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age = value; } } public MyDataObject(string name, int age) { _name = name; _age = age; } public MyDataObject() { } } }-----end----- -----box 程式----- 程式2 private void Form1_Load(object sender, EventArgs e) { bindingSource1.Add(new MyDataObject("code6421",18)); textBox1.DataBindings.Add(new Binding("Text", bindingSource1, "Name",true)); textBox2.DataBindings.Add(new Binding("Text", bindingSource1, "Age",true)); } -----end----- -----box 程式----- 程式3 public int Age { get { return _age; } set { if (value > 100) throw new Exception("the age can't greater 100."); _age = value; } }-----end----- -----box 程式----- 程式4 private void bindingSource1_BindingComplete(object sender, BindingCompleteEventArgs e) { if (e.BindingCompleteContext == BindingCompleteContext.DataSourceUpdate && e.BindingCompleteState == BindingCompleteState.Exception) MessageBox.Show(e.Exception.Message); }-----end----- -----box 程式----- 程式5 private void toolStripButton2_Click(object sender, EventArgs e) { bindingSource1.CancelEdit(); }-----end----- -----box 程式----- 程式6 public class MyDataObject3:IEditableObject {     ............ private MyDataObject3 _pendingObject = null; void IEditableObject.BeginEdit() { if (_pendingObject == null) _pendingObject = new MyDataObject3(_name, _age); } void IEditableObject.CancelEdit() { if (_pendingObject != null) { _name = _pendingObject._name; _age = _pendingObject._age; } _pendingObject = null; } void IEditableObject.EndEdit() { _pendingObject = null; } } }-----end----- -----box 程式----- 程式7 private void Form1_Load(object sender, EventArgs e) { BindingList source = new BindingList(); bindingSource1.DataSource = source; textBox1.DataBindings.Add(new Binding("Text", bindingSource1, "Name",true)); textBox2.DataBindings.Add(new Binding("Text", bindingSource1, "Age",true)); }-----end----- -----box 程式----- 程式8 public class MyDataObject4 : IEditableObject { ................ private MyDataObject4 _originalObject = null; public string Name { get ......... set { if (_pendingObject != null) ((IEditableObject)this).BeginEdit(); MarkDirty(); _name = value; } } public int Age { get ............ set { if (value > 100) throw new Exception("the age can't greater 100."); if (_pendingObject != null) ((IEditableObject)this).BeginEdit(); MarkDirty(); _age = value; } } [Browsable(false)] public MyDataObject4 OriginalObject { get { return _originalObject; } } ............. private void MarkDirty() { if (_originalObject == null) _originalObject = new MyDataObject4(_name,_age); } public void AcceptChanges() { _originalObject = null; } public void RevertChanges() { if (_originalObject != null) { _name = _originalObject._name; _age = _originalObject._age; _originalObject = null; } } }-----end-----