Menyinkronkan beberapa kontrol ke sumber data yang sama (Formulir Windows .NET)
Selama implementasi pengikatan data di Formulir Windows, beberapa kontrol terikat ke sumber data yang sama. Dalam situasi berikut, perlu untuk memastikan bahwa properti terikat kontrol tetap disinkronkan satu sama lain dan sumber data:
Jika sumber data tidak mengimplementasikan IBindingList, dan karena itu menghasilkan ListChanged peristiwa jenis ItemChanged.
Jika sumber data mengimplementasikan IEditableObject.
Dalam kasus sebelumnya, Anda dapat menggunakan BindingSource untuk mengikat sumber data ke kontrol. Dalam kasus terakhir, Anda menggunakan BindingSource
dan menangani BindingComplete peristiwa dan memanggil EndCurrentEdit pada BindingManagerBase.
Contoh kontrol pengikatan menggunakan BindingSource
Contoh kode berikut menunjukkan cara mengikat tiga kontrol, dua kontrol kotak teks, dan DataGridView kontrol ke kolom yang sama dalam DataSet menggunakan BindingSource komponen. Contoh menunjukkan cara menangani BindingComplete peristiwa. Ini memastikan bahwa ketika nilai teks dari satu kotak teks diubah, kotak teks lainnya dan DataGridView
kontrol diperbarui dengan nilai yang benar.
Contoh menggunakan BindingSource untuk mengikat sumber data dan kontrol. Atau, Anda dapat mengikat kontrol langsung ke sumber data dan mengambil BindingManagerBase untuk pengikatan dari formulir BindingContext dan kemudian menangani BindingComplete peristiwa untuk BindingManagerBase
. Untuk informasi selengkapnya tentang mengikat sumber data dan kontrol, lihat halaman bantuan tentang BindingComplete
peristiwa BindingManagerBase
.
public Form1()
{
InitializeComponent();
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);
}
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();
}
Public Class Form1
Private Sub InitializeControlsAndDataSource()
' Add a table and column to 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
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
InitializeControlsAndDataSource()
End Sub
End Class
Baca juga
.NET Desktop feedback
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk