C#应用BindingSource实现数据同步的方法

作者:shichen2014 时间:2021-07-09 16:15:48 

本文以实例形式讲述了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&amp;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#程序设计有所帮助。

标签:C#,BindingSource
0
投稿

猜你喜欢

  • Java web spring异步方法实现步骤解析

    2023-12-19 03:14:58
  • C#简单实现显示中文格式星期几的方法

    2021-09-08 12:27:05
  • 如何基于FTP4J实现FTPS连接过程解析

    2022-09-19 21:51:35
  • Spring实例化bean的四种方式详解

    2022-01-19 23:09:15
  • 浅谈C# 中的委托和事件

    2021-06-06 18:53:07
  • Java如何利用return结束方法调用

    2022-05-20 19:58:35
  • C# linq查询之动态OrderBy用法实例

    2023-11-04 04:22:56
  • SpringBoot整合OpenApi的实践

    2023-08-03 11:59:55
  • 举例说明Java设计模式编程中ISP接口隔离原则的使用

    2023-11-20 11:07:40
  • java反射使用示例分享

    2023-07-02 20:18:59
  • SSH框架网上商城项目第10战之搭建商品类基本模块

    2023-11-12 14:00:29
  • C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果

    2021-06-22 16:55:51
  • 员工管理系统java版

    2022-05-04 23:33:18
  • JAVA基于数组实现的商品信息查询功能示例

    2021-10-31 11:47:23
  • JAVA基础-GUI

    2023-10-24 22:26:07
  • C#中ListView控件实现窗体代码

    2023-02-04 02:55:06
  • Spring Security整合CAS的示例代码

    2023-11-12 19:04:26
  • springboot+nginx+https+linux实现负载均衡加域名访问简单测试

    2022-04-26 22:35:13
  • 44条Java代码优化建议

    2023-12-22 06:03:49
  • idea手动刷新git分支的详细教程

    2022-04-05 11:53:43
  • asp之家 软件编程 m.aspxhome.com