-
C#教程之C#应用BindingSource实现数据同步的方法
本文以实例形式讲述了C#应用BindingSource实现数据同步的方法,对C#数据库程序开发来说具有一定的参考借鉴价值。具体实现方法如下:
下面的代码示例演示如何使用 BindingSource 组件,将三个控件(两个文本框控件和一个 DataGridView 控件)绑定到 DataSet 中的同一列。
该示例演示如何处理 BindingComplete 事件,并确保当一个文本框的文本值更改时,会用正确的值更新其他文本框和 DataGridView 控件。
具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
// 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 组件跨窗体共享绑定数据,具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
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#程序设计有所帮助。
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比