Lier des données à des contrôles dans des solutions Bureau

Vous pouvez lier des contrôles Windows Forms et des contrôles hôtes dans un document Microsoft Office Word ou une feuille de calcul Microsoft Office Excel à une source de données pour que les contrôles affichent automatiquement les données. Vous pouvez lier des données à des contrôles dans des projets de niveau application et au niveau du document.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets au niveau du document et aux projets de complément VSTO. Consultez les fonctionnalités disponibles par application Office lication et le type de projet.

Les contrôles hôtes étendent des objets qui se trouvent dans les modèles objet Word et Excel, tels que les contrôles de contenu dans Word et les plages nommées dans Excel. Pour plus d’informations, consultez la vue d’ensemble des éléments hôtes et des contrôles hôtes.

Les contrôles Windows Forms et les contrôles hôtes utilisent le modèle de liaison de données Windows Forms, qui prend en charge la liaison de données simple et la liaison de données complexe à des sources de données telles que les datasets et les tables de données. Pour obtenir des informations complètes sur le modèle de liaison de données dans Windows Forms, consultez Liaison de données et Windows Forms.

Liaison de données simple

Il existe une liaison de données simple quand une propriété de contrôle est liée à un seul élément de données, tel qu’une valeur dans une table de données. Par exemple, le contrôle NamedRange a une propriété Value2 qui peut être liée à un champ dans un dataset. Lorsque le champ dans le dataset change, la valeur dans la plage nommée change également. Tous les contrôles hôtes, à l’exception du contrôle XMLNodes , prennent en charge la liaison de données simple. Le contrôle XMLNodes étant une collection, il ne prend pas en charge la liaison de données.

Pour effectuer une liaison de données simple à un contrôle hôte, ajoutez un Binding à la propriété DataBindings du contrôle. Un objet Binding représente la liaison simple entre une valeur de propriété du contrôle et la valeur d’un élément de données.

L’exemple suivant montre comment lier la propriété Value2 à un élément de données dans un projet au niveau du document.

Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Pour obtenir des procédures pas à pas qui illustrent une liaison de données simple, consultez Procédure pas à pas : liaison de données simple dans un projet au niveau du document pour un projet au niveau du document et procédure pas à pas : liaison de données simple dans un projet de complément VSTO pour un projet de complément VSTO.

Liaison de données complexe

Il existe une liaison de données complexe quand une propriété de contrôle est liée à plusieurs éléments de données, par exemple plusieurs colonnes dans une table de données. Le contrôle ListObject pour Excel est le seul contrôle hôte qui prend en charge la liaison de données complexe. Il existe également de nombreux contrôles Windows Forms qui prennent en charge la liaison de données complexe, tels que le contrôle DataGridView .

Pour effectuer une liaison de données complexe, affectez comme valeur de la propriété DataSource du contrôle un objet de source de données qui est pris en charge par la liaison de données complexe. Par exemple, la propriété DataSource du contrôle ListObject peut être liée à plusieurs colonnes dans une table de données. Toutes les données de la table s’affichent dans le contrôle ListObject , et le ListObject change à mesure que les données de la table de données changent. Pour obtenir la liste des sources de données que vous pouvez utiliser pour la liaison de données complexe, consultez les sources de données prises en charge par Windows Forms.

L’exemple de code suivant crée un DataSet avec deux objets DataTable et remplit l’une des tables avec des données. Le code lie ensuite le ListObject à la table qui contient des données. Cet exemple concerne un projet Excel au niveau du document.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Pour obtenir une procédure pas à pas qui illustre la liaison de données complexe, consultez Procédure pas à pas : liaison de données complexe dans un projet au niveau du document pour un projet au niveau du document.

Afficher des données dans des documents et des classeurs

Dans les projets au niveau du document, vous pouvez utiliser la fenêtre Sources de données pour ajouter facilement des contrôles liés aux données à vos documents ou vos classeurs, comme vous le feriez pour des Windows Forms. Pour plus d’informations sur l’utilisation de la fenêtre Sources de données, consultez Lier des contrôles Windows Forms aux données dans Visual Studio et ajouter de nouvelles sources de données.

Faire glisser des contrôles à partir de la fenêtre Sources de données

Un contrôle est créé sur le document quand vous faites glisser un objet sur à partir de la fenêtre Sources de données . Le type de contrôle créé varie selon que vous liez une ou plusieurs colonnes de données.

Pour Excel, un contrôle NamedRange est créé sur la feuille de calcul pour chaque champ, et un contrôle ListObject est créé pour chaque plage de données qui comprend plusieurs lignes et colonnes. Vous pouvez modifier ce comportement par défaut en sélectionnant la table ou le champ dans la fenêtre Sources de données , puis en choisissant un autre contrôle dans la liste déroulante.

Un contrôle ContentControl est ajouté aux documents. Le type de contrôle de contenu dépend du type de données du champ sélectionné.

Lier des données dans des projets au niveau du document au moment du design

Les rubriques suivantes présentent des exemples de liaison de données au moment du design :

Lier des données dans des projets de complément VSTO

Dans les projets de complément VSTO, vous pouvez ajouter des contrôles uniquement au moment de l’exécution. Les rubriques suivantes présentent des exemples de liaison de données au moment de l’exécution :

Mettre à jour les données liées aux contrôles hôtes

La liaison de données entre une source de données et un contrôle hôte implique une mise à jour de données bidirectionnelle. Avec la liaison de données simple, les modifications de la source de données sont répercutées automatiquement dans le contrôle hôte, mais les modifications du contrôle hôte nécessitent un appel explicite pour mettre à jour la source de données. En effet, dans certains cas les modifications d’un champ lié aux données ne sont acceptées que si elles sont accompagnées de modifications dans un autre champ lié aux données. Par exemple, vous pouvez avoir deux champs, un pour l’âge et un autre pour les années d’expérience. L’expérience ne peut pas dépasser l’âge. Un utilisateur ne peut pas mettre à jour l’âge de 50 à 25 puis l’expérience de 30 à 10 à moins d’apporter les modifications en même temps. Pour résoudre ce problème, les champs avec liaison de données simple ne sont mis à jour qu’une fois que les mises à jour ont été envoyées explicitement par le code.

Pour mettre à jour une source de données à partir de contrôles hôtes qui autorisent la liaison de données simple, vous devez envoyer des mises à jour à la source de données en mémoire (comme un DataSet ou DataTable) et à la base de données principale, si votre solution en utilise une.

Vous n’avez pas besoin de mettre à jour la source de données en mémoire de manière explicite quand vous effectuez une liaison de données complexe à l’aide du contrôle ListObject . Dans ce cas, les modifications sont envoyées automatiquement à la source de données en mémoire sans code supplémentaire.

Pour plus d’informations, consultez Guide pratique pour mettre à jour une source de données avec des données à partir d’un contrôle hôte.