Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bei der Implementierung der Datenbindung in Windows Forms sind mehrere Steuerelemente an dieselbe Datenquelle gebunden. In den folgenden Situationen muss sichergestellt werden, dass die gebundenen Eigenschaften des Steuerelements miteinander und der Datenquelle synchronisiert bleiben:
Wenn die Datenquelle IBindingList nicht implementiert und daher ListChanged-Ereignisse vom Typ ItemChanged generiert
Wenn die Datenquelle IEditableObjectimplementiert.
Im ersten Fall können Sie ein BindingSource-Objekt zum Binden der Datenquelle an die Steuerelemente verwenden. Im zweiten Fall verwenden Sie BindingSource, verarbeiten das BindingComplete-Ereignis und rufen EndCurrentEdit für das zugeordnete BindingManagerBase-Objekt auf.
Beispiel für Bindungssteuerelemente, die BindingSource verwenden
Im folgenden Codebeispiel wird veranschaulicht, wie drei Steuerelemente, zwei Textfeld-Steuerelemente und ein DataGridView-Steuerelement an dieselbe Spalte in einer DataSet mithilfe einer BindingSource Komponente gebunden werden. Das Beispiel veranschaulicht, wie das BindingComplete-Ereignis behandelt wird. Dadurch wird sichergestellt, dass beim Ändern des Textwerts eines Textfelds das andere Textfeld und das DataGridView-Steuerelement mit dem richtigen Wert aktualisiert werden.
Im Beispiel wird ein BindingSource verwendet, um die Datenquelle und die Steuerelemente zu verknüpfen. Alternativ können Sie die Steuerelemente direkt an die Datenquelle binden, das BindingManagerBase-Objekt für die Bindung aus dem BindingContext-Objekt des Formulars abrufen und dann das BindingComplete-Ereignis für BindingManagerBase verarbeiten. Weitere Informationen zum Binden der Datenquelle und der Steuerelemente finden Sie auf der Hilfeseite zum BindingComplete-Ereignis von 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
Siehe auch
.NET Desktop feedback