c语言一次绑定多个控件,如何:确保绑定到同一数据源的多个控件保持同步

如何:确保绑定到同一数据源的多个控件保持同步

03/30/2017

本文内容

在 Windows 窗体中使用数据绑定时,经常会将多个控件绑定到同一个数据源。 在某些情况下,可能需要采取额外的措施来确保控件的绑定属性彼此保持同步和数据源。 在以下两种情况下,需要执行这些步骤:

示例

下面的代码示例演示如何使用组件将三个控件(两个文本框控件和一个 DataGridView 控件)绑定到中的同一列 DataSet BindingSource 。 此示例演示如何处理事件, 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 occurred.

if (e.BindingCompleteContext ==

BindingCompleteContext.DataSourceUpdate && e.Exception == null)

// If not, end the current edit.

e.Binding.BindingManagerBase.EndCurrentEdit();

}' Declare the controls to be used.

Private WithEvents bindingSource1 As BindingSource

Private WithEvents textBox1 As TextBox

Private WithEvents textBox2 As TextBox

Private WithEvents dataGridView1 As DataGridView

Private Sub InitializeControlsAndDataSource()

' Initialize the controls and set location, size and

' other basic properties.

Me.dataGridView1 = New DataGridView()

Me.bindingSource1 = New BindingSource()

Me.textBox1 = New TextBox()

Me.textBox2 = New TextBox()

Me.dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize

Me.dataGridView1.Dock = DockStyle.Top

Me.dataGridView1.Location = New Point(0, 0)

Me.dataGridView1.Size = New Size(292, 150)

Me.textBox1.Location = New Point(132, 156)

Me.textBox1.Size = New Size(100, 20)

Me.textBox2.Location = New Point(12, 156)

Me.textBox2.Size = New Size(100, 20)

Me.ClientSize = New Size(292, 266)

Me.Controls.Add(Me.textBox2)

Me.Controls.Add(Me.textBox1)

Me.Controls.Add(Me.dataGridView1)

' Declare the DataSet and add a table and column.

Dim set1 As 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)

End Sub

Private Sub bindingSource1_BindingComplete(ByVal sender As Object, _

ByVal e As BindingCompleteEventArgs) Handles bindingSource1.BindingComplete

' Check if the data source has been updated, and that no error has occurred.

If e.BindingCompleteContext = BindingCompleteContext.DataSourceUpdate _

AndAlso e.Exception Is Nothing Then

' If not, end the current edit.

e.Binding.BindingManagerBase.EndCurrentEdit()

End If

End Sub

编译代码

此代码示例需要

处理了事件的窗体 Load ,并 InitializeControlsAndDataSource 从窗体的 Load 事件处理程序调用了此示例中的方法。

另请参阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值