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

所属分类: 软件编程 / C#教程 阅读数: 98
收藏 0 赞 0 分享

本文以实例形式讲述了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#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多