当前位置: 移动技术网 > IT编程>开发语言>c# > C#应用BindingSource实现数据同步的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
本文以实例形式讲述了c#应用bindingsource实现数据同步的方法,对c#数据库程序开发来说具有一定的参考借鉴价值。具体实现方法如下: 下面的代码示例演示如何使用

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网