Liaison de données aux contrôles dans les solutions Office
Vous pouvez lier des contrôles Windows Forms et des contrôles hôtes sur un document Word Microsoft Office ou une feuille de calcul Microsoft Office Excel à une source de données afin que les contrôles affichent automatiquement les données. Vous pouvez lier des données aux contrôles à la fois dans les projets au niveau de l'application et au niveau du document.
S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document et de niveau application pour Microsoft Office 2010 et la version 2007 de Microsoft® Office System. Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet Office.
Les contrôles hôtes étendent des objets qui sont dans des 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 Vue d'ensemble des éléments hôtes et des contrôles hôtes.
Les contrôles Windows Forms et hôtes utilisent le modèle de liaison de données Windows Forms, qui prend en charge à la fois la liaison de données simple et la liaison de données complexe à des sources de données telles que les groupes et les tables de données. Pour obtenir des informations complètes sur le modèle de liaison de données dans les Windows Forms, consultez Liaison de données et Windows Forms.
Pour une démonstration vidéo connexe, consultez Comment faire pour consommer des données de base de données dans Excel ? (page éventuellement en anglais).
Liaison de données simple
La liaison de données simple s'applique lorsqu'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 possède une propriété Value2 qui peut être liée à un champ dans un groupe de données. Lorsque le champ dans le groupe de données change, la valeur dans la plage nommée change également. Tous les contrôles hôtes, à l'exception de XMLNodes, prennent en charge la liaison de données simple. Le contrôle XMLNodes est une collection ; par conséquent, il ne prend pas en charge la liaison de données.
Pour exécuter 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. Cet exemple de code fait partie d'un exemple plus complet fourni pour la propriété DataBindings().
Dim binding1 As New Binding("Value2", ds, "Customers.Names", True)
namedRange1.DataBindings.Add(binding1)
Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);
Pour suivre des procédures pas à pas qui présentent la 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 au niveau de l'application pour un projet au niveau de l'application.
Liaison de données complexe
La liaison de données complexe s'applique lorsqu'une propriété de contrôle est liée à plusieurs éléments de données, tels que plusieurs colonnes dans une table de données. Le contrôle ListObject pour Excel est le seul contrôle hôte à prendre en charge la liaison de données complexe. De nombreux contrôles Windows Forms prennent également en charge la liaison de données complexe ; c'est le cas par exemple du contrôle DataGridView.
Pour exécuter une liaison de données complexe, affectez à la propriété DataSource du contrôle un objet source de données pris en charge par la liaison de données complexe. Par exemple, le contrôle DataSource possède une propriété ListObject qui peut être liée à plusieurs colonnes dans une table de données. Toutes les données contenues dans la table de données s'affichent dans le contrôle ListObject, et à mesure que les données dans la table de données changent, ListObject change également. Pour obtenir une liste des sources de données que vous pouvez utiliser pour la liaison de données complexe, consultez Sources de données prises en charge par les Windows Forms.
L'exemple de code suivant crée un DataSet avec deux objets DataTable et remplit de données l'une des tables. Le code lie ensuite le ListObject à la table qui contient des données. Cet exemple est destiné à un projet au niveau du document Excel.
Private Sub ListObject_DataSourceAndMember()
' Create a DataSet and two DataTables.
Dim ordersDataSet As New DataSet("ordersDataSet")
Dim tableCustomers As New DataTable("Customers")
Dim tableProducts As 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"))
Dim dr As DataRow = tableCustomers.NewRow()
dr("LastName") = "Chan"
dr("FirstName") = "Gareth"
tableCustomers.Rows.Add(dr)
' Create a list object.
Dim List1 As Microsoft.Office.Tools.Excel.ListObject = _
Me.Controls.AddListObject(Me.Range( _
"A1"), "Customers")
' Bind the list object to the Customers table.
List1.AutoSetDataBoundColumnHeaders = True
List1.DataSource = ordersDataSet
List1.DataMember = "Customers"
End Sub
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", missing], "Customers");
// Bind the list object to the Customers table.
list1.AutoSetDataBoundColumnHeaders = true;
list1.DataSource = ordersDataSet;
list1.DataMember = "Customers";
}
Pour suivre des procédures pas à pas qui présentent 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 et Procédure pas à pas : liaison de données complexe dans un projet au niveau de l'application pour un projet au niveau de l'application.
Affichage de données dans des documents et des classeurs
Dans des projects 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, de la même manière que vous l'utilisez pour Windows Forms. Pour plus d'informations sur l'utilisation de la fenêtre Sources de données, consultez Liaison de contrôles Windows Forms à des données dans Visual Studio et Sources de données (fenêtre).
Faire glisser les contrôles depuis la fenêtre Sources de données
Vous pouvez créer un object sur un document en faisant glisser un contrôle de la fenêtre Sources de données vers le document. Le type de contrôle créé varie selon que vous effectuez une liaison avec une seule ou avec plusieurs colonnes de données.
Pour Excel, un contrôle NamedRange est créé sur la feuille de calcul pour chaque champ individuel, et un contrôle ListObject est créé pour chaque plage de données incluant plusieurs lignes et plusieurs colonnes. Vous pouvez modifier ce paramétrage par défaut en sélectionnant la table ou le champ dans la fenêtre Sources de données et en choisissant ensuite un contrôle différent 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 que vous avez sélectionné.
Liaison de 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 :
Comment : remplir des feuilles de calcul avec des données provenant d'une base de données
Comment : remplir des documents avec les données d'une base de données
Comment : remplir des documents avec les données de services
Comment : parcourir les enregistrements de base de données dans une feuille de calcul
Liaison de données dans des projets au niveau de l'application
Dans les projets au niveau de l'application, vous ne pouvez ajouter des contrôles qu'au moment de l'exécution. Les rubriques suivantes présentent des exemples de liaison de données au moment de l'exécution :
Procédure pas à pas : liaison de données simple dans un projet au niveau de l'application
Procédure pas à pas : liaison de données complexe dans un projet au niveau de l'application
Mise à jour des données qui sont 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. Dans une liaison de données simple, les modifications dans la source de données sont automatiquement répercutées dans le contrôle hôte, mais les modifications dans le contrôle hôte requièrent un appel explicite pour mette à jour la source de données. Cela est dû au fait que, dans certains cas, les modifications dans un champ lié aux données ne sont pas acceptées si elles ne sont pas accompagnées par des modifications dans un autre champ lié aux données. Par exemple, vous pouvez avoir deux champs : un pour l'âge et un 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 une liaison de données simple ne sont pas mis à jour avant que les mises à jour ne soient envoyées explicitement par code.
Pour mettre à jour une source de données à partir de contrôles hôtes qui activent la liaison de données simple, vous devez envoyer les mises à jour à la source de données en mémoire (par exemple un DataSet ou un DataTable) et à la base de données principale, si votre solution en utilise une.
Vous n'avez pas besoin de mettre à jour explicitement la source de données en mémoire lorsque vous exécutez une liaison de données complexe à l'aide du contrôle ListObject. Dans ce cas, les modifications sont automatiquement envoyées à la source de données en mémoire sans que du code supplémentaire soit nécessaire.
Pour plus d'informations, consultez Comment : mettre à jour une source de données avec les données d'un contrôle hôte.
Voir aussi
Tâches
Comment : créer un contrôle à liaison simple dans un Windows Form
Comment : mettre à jour les données à l'aide d'un TableAdapter
Concepts
Liaison de données et Windows Forms
Liaison de contrôles Windows Forms à des données dans Visual Studio
Enregistrement de données dans des groupes de données