当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-11-02

    本文导语:  本文以实例形式讲述了C#应用BindingSource实现数据同步的方法,对C#数据库程序开发来说具有一定的参考借鉴价值。具体实现方法如下: 下面的代码示例演示如何使用 BindingSource 组件,将三个控件(两个文本框控件和一个 DataGridV...

本文以实例形式讲述了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 =
        "" +
        "" +
         "Dave Matthews" +
         "Under the Table and Dreaming" + 
         "19943.5" +
         "ColdplayX&Y" + 
         "20054" +
         "Dave Matthews" + 
         "Live at Red Rocks" + 
         "19974" +
         "U2" + 
         "Joshua Tree1987" + 
         "5" +
         "U2" +
         "How to Dismantle an Atomic Bomb" + 
         "20044.5" +
         "Natalie Merchant" +
         "Tigerlily1995" +
         "3.5" +
         "";
      // 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# Split分隔字符串的应用(C#、split、分隔、字符串)
  • c# 应用事务的简单实例
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • C#访问应用程序配置文件的方法
  • C#反射的一些基本应用
  • c#取得控制台应用程序根目录
  • C#可选参数应用举例
  • C# Pointer指针应用实例简述
  • 解决C# X64应用程序中读取WParam溢出的问题
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文
  • C#窗口关闭到最小化与应用程序最小化到托盘的实现代码
  • C#加密在实际中的应用
  • C#打包应用程序,与.NETFramework介绍
  • C#数组应用分析第1/2页
  • c# 多维数组应用举例(初级)
  • C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)
  • C#实现点击按钮退出应用程序实例
  • C# 禁止应用程序多次启动的实例
  • C#中分部类和分部方法的应用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在数据库应用中,多线程须不需要考虑同步问题,急!谢谢
  • shell脚本变量与应用程序同步的问题
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
  • 重装服务器后IIS网站错误(应用程序中的服务器错误)
  • 让HTML5应用与原生应用一样运行流畅 Steroids.js
  • 隐藏andriod 应用app启动图标的几种方法
  • 如何将应用程序加到桌面或应用程序组?
  • ​传统应用的docker化迁移
  • 怎样开发在LINUX 上运行的应用程序,像WINDOWS桌面应用程序一样
  • Http协议3XX重定向介绍及301跳转和302跳转应用场景
  • adnroid已安装应用中检测某应用是否安装的代码实例
  • Docker 1.12.4应用容器引擎发布及下载地址
  • linux商业应用或者说开源软件商业应用是否需要付费?
  • Docker v1.13.0 应用容器引擎正式版发布及下载地址
  • 在多cpu的linux系统上,到底是用多线程应用好些还是多进程应用好些??
  • docker应用之利用Docker构建自动化运维
  • 我要监测一台远程电脑的状态(未上线/上线但没打开每个应用程序/上线且打开应用程序),该如何作?
  • Windows下Docker应用部署相关问题详解
  • Android应用内调用第三方应用的方法
  • Docker详细的应用与实践架构举例说明
  • asp.net应用程序的生命周期和iis应用程序池
  • 手动执行应用程序ok,但用crontab(在正确的用户名下)运行应用程序就报-12545(tns连接错误),怎么解决?
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • 介绍下速度快而应用功能齐全的LINUX版本,忍受不了windows的低速了……应用即可,最好带X。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3