zoukankan      html  css  js  c++  java
  • 《(学习笔记)两天进步一点点》(3)——应用BindingSource实现数据同步

    下面的代码示例演示如何使用 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 组件跨窗体共享绑定数据
    //************************************************

     

    使用 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 });
    }

    }
    }

     

     






    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    MySQL启动报错Starting MySQL. ERROR! The server quit without updating PID file
    vue安装
    web漏洞分析防御
    dedecms三级目录
    阿里云Linux服务器漏洞修复
    Windows下elasticsearch安装并且同步数据库
    解决ecshop清除缓存css样式没反应问题
    PHP正则匹配替换图片地址
    阿里云漏洞修复
    Apache Pig
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1798652.html
Copyright © 2011-2022 走看看