本文以实例形式讲述了C#应用BindingSource实现数据同步的方法,对C#数据库程序开发来说具有一定的参考借鉴价值。具体实现方法如下:
下面的代码示例演示如何使用 BindingSource 组件,将三个控件(两个文本框控件和一个 DataGridView 控件)绑定到 DataSet 中的同一列。
该示例演示如何处理 BindingComplete 事件,并确保当一个文本框的文本值更改时,会用正确的值更新其他文本框和 DataGridView 控件。
具体代码如下:
// Declare the controls to be used. private BindingSource bindingSource1; private TextBox textBox1; private TextBox textBox2; private DataGridView dataGridView1; private void InitializeControlsAndDataSource() { // Initialize the controls and set location, size and // other basic properties. this.dataGridView1 = new DataGridView(); this.bindingSource1 = new BindingSource(); this.textBox1 = new TextBox(); this.textBox2 = new TextBox(); this.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Dock = DockStyle.Top; this.dataGridView1.Location = new Point(0, 0); this.dataGridView1.Size = new Size(292, 150); this.textBox1.Location = new Point(132, 156); this.textBox1.Size = new Size(100, 20); this.textBox2.Location = new Point(12, 156); this.textBox2.Size = new Size(100, 20); this.ClientSize = new Size(292, 266); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Controls.Add(this.dataGridView1); // Declare the DataSet and add a table and column. DataSet set1 = new DataSet(); set1.Tables.Add(\"Menu\"); set1.Tables[0].Columns.Add(\"Beverages\"); // Add some rows to the table. set1.Tables[0].Rows.Add(\"coffee\"); set1.Tables[0].Rows.Add(\"tea\"); set1.Tables[0].Rows.Add(\"hot chocolate\"); set1.Tables[0].Rows.Add(\"milk\"); set1.Tables[0].Rows.Add(\"orange juice\"); // Set the data source to the DataSet. bindingSource1.DataSource = set1; //Set the DataMember to the Menu table. bindingSource1.DataMember = \"Menu\"; // Add the control data bindings. dataGridView1.DataSource = bindingSource1; textBox1.DataBindings.Add(\"Text\", bindingSource1, \"Beverages\", true, DataSourceUpdateMode.OnPropertyChanged); textBox2.DataBindings.Add(\"Text\", bindingSource1, \"Beverages\", true, DataSourceUpdateMode.OnPropertyChanged); bindingSource1.BindingComplete += new BindingCompleteEventHandler(bindingSource1_BindingComplete); } private void bindingSource1_BindingComplete(object sender, BindingCompleteEventArgs e) { // Check if the data source has been updated, and that no error has occured. if (e.BindingCompleteContext == BindingCompleteContext.DataSourceUpdate && e.Exception == null) // If not, end the current edit. e.Binding.BindingManagerBase.EndCurrentEdit(); }
下面的代码演示如何使用 BindingSource 组件跨窗体共享绑定数据,具体代码如下:
using System; using System.Drawing; using System.Windows.Forms; using System.Data; namespace BindingSourceMultipleForms { public class MainForm : Form { public MainForm() { this.Load += new EventHandler(MainForm_Load); } private BindingSource bindingSource1; private Button button1; private void MainForm_Load(object sender, EventArgs e) { InitializeData(); } private void InitializeData() { bindingSource1 = new System.Windows.Forms.BindingSource(); // Handle the BindingComplete event to ensure the two forms // remain synchronized. bindingSource1.BindingComplete += new BindingCompleteEventHandler(bindingSource1_BindingComplete); ClientSize = new System.Drawing.Size(292, 266); DataSet dataset1 = new DataSet(); // Some xml data to populate the DataSet with. string musicXml = \"<?xml version=\'1.0\' encoding=\'UTF-8\'?>\" + \"<music>\" + \"<recording><artist>Dave Matthews</artist>\" + \"<cd>Under the Table and Dreaming</cd>\" + \"<releaseDate>1994</releaseDate><rating>3.5</rating></recording>\" + \"<recording><artist>Coldplay</artist><cd>X&Y</cd>\" + \"<releaseDate>2005</releaseDate><rating>4</rating></recording>\" + \"<recording><artist>Dave Matthews</artist>\" + \"<cd>Live at Red Rocks</cd>\" + \"<releaseDate>1997</releaseDate><rating>4</rating></recording>\" + \"<recording><artist>U2</artist>\" + \"<cd>Joshua Tree</cd><releaseDate>1987</releaseDate>\" + \"<rating>5</rating></recording>\" + \"<recording><artist>U2</artist>\" + \"<cd>How to Dismantle an Atomic Bomb</cd>\" + \"<releaseDate>2004</releaseDate><rating>4.5</rating></recording>\" + \"<recording><artist>Natalie Merchant</artist>\" + \"<cd>Tigerlily</cd><releaseDate>1995</releaseDate>\" + \"<rating>3.5</rating></recording>\" + \"</music>\"; // Read the xml. System.IO.StringReader reader = new System.IO.StringReader(musicXml); dataset1.ReadXml(reader); // Get a DataView of the table contained in the dataset. DataTableCollection tables = dataset1.Tables; DataView view1 = new DataView(tables[0]); // Create a DataGridView control and add it to the form. DataGridView datagridview1 = new DataGridView(); datagridview1.ReadOnly = true; datagridview1.AutoGenerateColumns = true; datagridview1.Width = 300; this.Controls.Add(datagridview1); bindingSource1.DataSource = view1; datagridview1.DataSource = bindingSource1; datagridview1.Columns.Remove(\"artist\"); datagridview1.Columns.Remove(\"releaseDate\"); // Create and add a button to the form. button1 = new Button(); button1.AutoSize = true; button1.Text = \"Show/Edit Details\"; this.Controls.Add(button1); button1.Location = new Point(50, 200); button1.Click += new EventHandler(button1_Click); } // Handle the BindingComplete event to ensure the two forms // remain synchronized. private void bindingSource1_BindingComplete(object sender, BindingCompleteEventArgs e) { if (e.BindingCompleteContext == BindingCompleteContext.DataSourceUpdate && e.Exception == null) e.Binding.BindingManagerBase.EndCurrentEdit(); } // The detailed form will be shown when the button is clicked. private void button1_Click(object sender, EventArgs e) { DetailForm detailForm = new DetailForm(bindingSource1); detailForm.Show(); } [STAThread] static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); } } // The detail form class. public class DetailForm : Form { private BindingSource formDataSource; // The constructor takes a BindingSource object. public DetailForm(BindingSource dataSource) { formDataSource = dataSource; this.ClientSize = new Size(240, 200); TextBox textBox1 = new TextBox(); this.Text = \"Selection Details\"; textBox1.Width = 220; TextBox textBox2 = new TextBox(); TextBox textBox3 = new TextBox(); TextBox textBox4 = new TextBox(); textBox4.Width = 30; textBox3.Width = 50; // Associate each text box with a column from the data source. textBox1.DataBindings.Add(\"Text\", formDataSource, \"cd\", true, DataSourceUpdateMode.OnPropertyChanged); textBox2.DataBindings.Add(\"Text\", formDataSource, \"artist\", true); textBox3.DataBindings.Add(\"Text\", formDataSource, \"releaseDate\", true); textBox4.DataBindings.Add(\"Text\", formDataSource, \"rating\", true); textBox1.Location = new Point(10, 10); textBox2.Location = new Point(10, 40); textBox3.Location = new Point(10, 80); textBox4.Location = new Point(10, 120); this.Controls.AddRange(new Control[] { textBox1, textBox2, textBox3, textBox4 }); } } }
希望本文所述对大家的C#程序设计有所帮助。
本文地址:https://www.stayed.cn/item/11601
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我