Partager via


Synchroniser plusieurs contrôles avec la même source de données (Windows Forms .NET)

Pendant l’implémentation de la liaison de données dans Windows Forms, plusieurs contrôles sont liés à la même source de données. Dans les situations suivantes, il est nécessaire de s’assurer que les propriétés liées du contrôle restent synchronisées entre elles et la source de données :

Dans l’ancien cas, vous pouvez utiliser un BindingSource pour lier la source de données aux contrôles. Dans ce dernier cas, vous utilisez un BindingSource événement et gérez l’événement BindingComplete et appelez-leEndCurrentEdit.BindingManagerBase

Exemple de contrôles de liaison à l’aide de BindingSource

L’exemple de code suivant montre comment lier trois contrôles, deux contrôles de zone de texte et un DataGridView contrôle à la même colonne d’un DataSet composant à l’aide d’un BindingSource composant. L’exemple montre comment gérer l’événement BindingComplete . Il garantit que lorsque la valeur de texte d’une zone de texte est modifiée, l’autre zone de texte et le DataGridView contrôle sont mis à jour avec la valeur correcte.

L’exemple utilise un BindingSource pour lier la source de données et les contrôles. Vous pouvez également lier les contrôles directement à la source de données et récupérer la BindingManagerBase liaison à partir du formulaire, puis gérer l’événement BindingContextBindingComplete pour le BindingManagerBase. Pour plus d’informations sur la liaison de la source de données et des contrôles, consultez la page d’aide sur l’événement BindingComplete de 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

Voir aussi