Procédure pas à pas : liaison de données aux contrôles dans un volet Actions Word
Mise à jour : novembre 2007
S'applique à |
---|
Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés. Type de projet
Version de Microsoft Office
Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet. |
Cette procédure pas à pas montre la liaison de données aux contrôles dans un volet Actions de Microsoft Office Word. Les contrôles illustrent une relation maître/détail entre des tables dans une base de données SQL Server.
Cette procédure pas à pas illustre les tâches suivantes :
Création d'un volet Actions avec des contrôles Windows Forms liés aux données.
Utilisation d'une relation maître/détail afin d'afficher des données dans les contrôles.
Affichage du volet Actions à l'ouverture de l'application.
Remarque : |
---|
Votre ordinateur risque d'afficher des noms ou des emplacements différents pour certains éléments de l'interface utilisateur Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio. |
Composants requis
Vous avez besoin des composants suivants pour exécuter cette procédure pas à pas :
Visual Studio Tools pour Office (composant facultatif de Visual Studio 2008 Professional et Visual Studio Team System)
Microsoft Office Word 2003 ou Microsoft Office Word 2007
Accès à un serveur sur lequel est installé l'exemple de base de données SQL Server Northwind
Autorisations d'accès en lecture et écriture à la base de données SQL Server
Visual Studio Tools pour Office est installé par défaut avec les versions répertoriées de Visual Studio. Pour vérifier s'il est installé, consultez Installation de Visual Studio Tools pour Office.
Création du projet
La première étape consiste à créer un projet de document Word.
Pour créer un projet
Créez un projet de document Word et appelez-le My Word Actions Pane. Dans l'Assistant, sélectionnez Créer un nouveau document.
Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.
Visual Studio ouvre le nouveau document Word dans le concepteur et ajoute le projet My Word Actions Pane à l'Explorateur de solutions.
Ajout de contrôles au volet Actions
Pour cette procédure pas à pas, vous avez besoin d'un contrôle de volet Actions qui contient des contrôles Windows Forms liés aux données. Ajoutez une source de données au projet, puis faites glisser des contrôles de la fenêtre Sources de données vers le contrôle de volet Actions.
Pour ajouter un contrôle de volet Actions
Sélectionnez le projet My Word Actions Pane dans l'Explorateur de solutions.
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Contrôle de volet Actions, attribuez-lui le nom ActionsControl et cliquez sur Ajouter.
Pour ajouter une nouvelle source de données au projet
Si la fenêtre Sources de données n'est pas visible, cliquez sur Afficher les sources de données dans le menu Données.
Remarque : Si Afficher les sources de données n'est pas disponible, cliquez dans le document Word, puis vérifiez une nouvelle fois.
Cliquez sur Ajouter une nouvelle source de données pour démarrer l'Assistant Configuration de source de données.
Sélectionnez Base de données, puis cliquez sur Suivant.
Sélectionnez une connexion de données pour l'exemple de base de données Northwind dans SQL Server ou ajoutez une nouvelle connexion à l'aide du bouton Nouvelle connexion.
Cliquez sur Suivant.
Désélectionnez l'option pour enregistrer la connexion si elle est sélectionnée, puis cliquez sur Suivant.
Développez le nœud Tables dans la fenêtre Objets de base de données.
Activez la case à cocher en regard des tables Suppliers et Products.
Cliquez sur Terminer.
L'Assistant ajoute les tables Suppliers et Products à la fenêtre Sources de données. Il ajoute également un groupe de données typé à votre projet, visible dans l'Explorateur de solutions.
Pour ajouter des contrôles Windows Forms liés aux données à un contrôle de volet Actions
Dans la fenêtre Sources de données, développez la table Suppliers.
Cliquez sur la flèche de déroulement du nœud Company Name et sélectionnez ComboBox.
Faites glisser CompanyName de la fenêtre Sources de données vers le contrôle de volet Actions.
Un contrôle ComboBox est créé sur le contrôle de volet Actions. En même temps, un BindingSource nommé SuppliersBindingSource, un adaptateur de table et une instance de DataSet sont ajoutés à la barre d'état des composants du projet.
Sélectionnez SuppliersBindingNavigator dans la barre d'état Composant et appuyez sur SUPPR. Vous n'utiliserez pas le SuppliersBindingNavigator dans cette procédure pas à pas.
Remarque : La suppression du SuppliersBindingNavigator ne supprime pas la totalité du code qui a été généré pour lui. Vous pouvez supprimer ce code.
Déplacez la zone de liste déroulante afin qu'elle se trouve sous l'étiquette et remplacez la valeur de la propriété Size par 171, 21.
Dans la fenêtre Sources de données, développez la table Products, enfant de la table Suppliers.
Cliquez sur la flèche de déroulement du nœud ProductName et sélectionnez ListBox.
Faites glisser ProductName jusqu'au contrôle de volet Actions.
Un contrôle ListBox est créé sur le contrôle de volet Actions. En même temps, un BindingSource nommé ProductBindingSource et un adaptateur de table sont ajoutés à la barre d'état des composants du projet.
Déplacez la zone de liste afin qu'elle se trouve sous l'étiquette et remplacez la valeur de la propriété Size par 171,95.
Faites glisser un Button de la Boîte à outils vers le contrôle de volet Actions et placez-le au-dessous de la zone de liste.
Cliquez avec le bouton droit sur Button, cliquez sur Propriétés dans le menu contextuel et modifiez les propriétés suivantes.
Propriété
Valeur
Name
Insert
Text
Insérer
Redimensionnez le contrôle utilisateur pour qu'il corresponde aux contrôles.
Installation de la source de données
Pour installer la source de données, ajoutez du code à l'événement Load du contrôle du volet Actions pour remplir le contrôle avec des données du DataTable et définissez les propriétés DataSource et DataMember pour chaque contrôle.
Pour charger le contrôle avec les données
Dans le gestionnaire d'événements Load de la classe ActionsControl, ajoutez le code suivant.
Private Sub ActionsControl_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load Me.SuppliersTableAdapter.Fill(Me.NorthwindDataSet.Suppliers) Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products) End Sub
private void ActionsControl_Load(object sender, EventArgs e) { this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers); this.productsTableAdapter.Fill(this.northwindDataSet.Products); }
En C#, vous devez attacher le gestionnaire d'événements à l'événement Load. Vous pouvez placer ce code dans le constructeur ActionsControl, après l'appel à InitializeComponent. Pour plus d'informations sur la création des gestionnaires d'événements, consultez Comment : créer des gestionnaires d'événements dans Visual Studio Tools pour Office.
this.Load += new EventHandler(ActionsControl_Load);
Pour définir les propriétés de liaison de données des contrôles
Sélectionnez le contrôle CompanyNameComboBox.
Dans la fenêtre Propriétés, cliquez sur le bouton à droite de la propriété DataSource et sélectionnez suppliersBindingSource.
Cliquez sur le bouton à droite de la propriété DisplayMember et sélectionnez CompanyName.
Développez la propriété DataBindings, cliquez sur le bouton à droite de la propriété Text et sélectionnez Aucun.
Sélectionnez le contrôle ProductNameListBox.
Dans la fenêtre Propriétés, cliquez sur le bouton à droite de la propriété DataSource et sélectionnez productsBindingSource.
Cliquez sur le bouton à droite de la propriété DisplayMember et sélectionnez ProductName.
Développez la propriété DataBindings, cliquez sur le bouton à droite de la propriété SelectedValue et sélectionnez Aucun.
Ajout d'une méthode pour insérer des données dans un tableau
La tâche suivante consiste à lire les données des contrôles dépendants et à remplir un tableau dans votre document Word. Commencez par créer une procédure pour mettre en forme les titres dans le tableau, puis ajoutez la méthode AddData pour créer et mettre en forme un tableau Word.
Pour mettre en forme les titres du tableau
Dans la classe ActionsControl, créez une méthode pour mettre en forme les titres du tableau.
Shared Sub SetHeadings(ByVal tblCell As Word.Cell, ByVal text As String) With tblCell.Range .Text = text .Font.Bold = True .ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter End With End Sub
static void SetHeadings(Microsoft.Office.Interop.Word.Cell tblCell, string text) { tblCell.Range.Text = text; tblCell.Range.Font.Bold = 1; tblCell.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; }
Pour créer le tableau
Dans la classe ActionsControl, écrivez une méthode qui créera un tableau s'il n'en existe pas déjà un, et ajoutera les données du volet Actions au tableau.
Private Sub AddData(ByVal row As System.Data.DataRow, ByVal companyName As String) ' Create a table if it doesn't already exist. If Globals.ThisDocument.Tables.Count = 0 Then Try ' Create a table. Dim tbl As Word.Table = Globals.ThisDocument.Tables.Add( _ Globals.ThisDocument.Application.Selection.Range, 1, 4) ' Insert headings. SetHeadings(tbl.Cell(1, 1), "Company Name") SetHeadings(tbl.Cell(1, 2), "Product Name") SetHeadings(tbl.Cell(1, 3), "Quantity") SetHeadings(tbl.Cell(1, 4), "Unit Price") Catch ex As Exception MessageBox.Show("Problem creating Products table: " & ex.Message, _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End If ' Add data from data row to the table. Dim selection As Word.Selection = Globals.ThisDocument.Application.Selection If selection.Tables.Count > 0 Then Dim newRow As Word.Row = Globals.ThisDocument.Tables(1).Rows.Add() With newRow .Range.Font.Bold = False .Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft .Cells(4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight .Cells(1).Range.Text = companyName .Cells(2).Range.Text = row.Item("ProductName").ToString .Cells(3).Range.Text = row.Item("QuantityPerUnit").ToString .Cells(4).Range.Text = Math.Round(row.Item("UnitPrice"), 2) End With Else MessageBox.Show("Cursor must be within a table.", _ "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
private void AddData(System.Data.DataRow row, string companyName) { object missing = System.Type.Missing; // Create a table if it doesn't already exist. if (Globals.ThisDocument.Tables.Count == 0) { try { // Create a table. Microsoft.Office.Interop.Word.Table tbl = Globals.ThisDocument.Tables.Add (Globals.ThisDocument.Application.Selection.Range, 1, 4, ref missing, ref missing); // Insert headings. SetHeadings(tbl.Cell(1, 1), "Company Name"); SetHeadings(tbl.Cell(1, 2), "Product Name"); SetHeadings(tbl.Cell(1, 3), "Quantity"); SetHeadings(tbl.Cell(1, 4), "Unit Price"); } catch (Exception ex) { MessageBox.Show("Problem creating Products table: " + ex.Message, "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // Add data from data row to the table. Microsoft.Office.Interop.Word.Selection selection = Globals.ThisDocument.Application.Selection; if (selection.Tables.Count > 0) { Microsoft.Office.Interop.Word.Row newRow = Globals.ThisDocument.Tables[1].Rows.Add(ref missing); newRow.Range.Font.Bold = 0; newRow.Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphLeft; newRow.Cells[4].Range.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphRight; newRow.Cells[1].Range.Text = companyName; newRow.Cells[2].Range.Text = row["ProductName"].ToString(); newRow.Cells[3].Range.Text = row["QuantityPerUnit"].ToString(); newRow.Cells[4].Range.Text = Math.Round(Convert.ToDouble(row["UnitPrice"])).ToString("#,##0.00"); } else { MessageBox.Show("Cursor must be within a table.", "Actions Pane", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
Pour insérer du texte dans un tableau Word
Ajoutez le code suivant au gestionnaire d'événements Click du bouton Insérer.
Private Sub Insert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Insert.Click Dim tbl As System.Data.DataTable = NorthwindDataSet.Products Dim rows() As System.Data.DataRow ' Check if a product is selected. If Not Me.ProductNameListBox.SelectedIndex < 0 Then Dim product As String = Me.ProductNameListBox.SelectedItem.Row.Item("ProductName") Dim company As String = Me.CompanyNameComboBox.Text ' Return the data row from the selected Product in the list box. rows = tbl.Select("[ProductName] = '" & product.Replace("'", "''") & "'") AddData(rows(0), company) Else MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK) End If End Sub
private void Insert_Click(object sender, System.EventArgs e) { System.Data.DataTable tbl = northwindDataSet.Products; System.Data.DataRow[] rows; // Check if a product is selected. if (this.productNameListBox.SelectedIndex >= 0) { System.Data.DataRowView productRow = (System.Data.DataRowView)this.productNameListBox.SelectedItem; string product = productRow.Row["ProductName"].ToString(); string company = this.companyNameComboBox.Text; // Return the data row from the selected product. rows = tbl.Select("[ProductName] = '" + product.Replace("'", "''") + "'"); this.AddData(rows[0], company); } else { MessageBox.Show("Please select a product.", "Actions Pane", MessageBoxButtons.OK); } }
En C#, vous devez créer un gestionnaire d'événements pour l'événement Click du bouton. Vous pouvez placer ce code dans le gestionnaire d'événements Load de la classe ActionsControl.
this.Insert.Click += new EventHandler(Insert_Click);
Affichage du volet Actions
Le volet Actions devient visible une fois que des contrôles lui ont été ajoutés.
Pour afficher le volet Actions
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur ThisDocument.vb ou ThisDocument.cs, puis cliquez sur Afficher le code dans le menu contextuel.
Créez une nouvelle instance du contrôle en haut de la classe ThisDocument afin qu'elle ressemble à l'exemple suivant.
Dim actions As New ActionsControl
private ActionsControl actions = new ActionsControl();
Ajoutez du code au gestionnaire d'événements Startup de ThisDocument afin qu'il ressemble à l'exemple suivant.
Me.ActionsPane.Controls.Add(actions)
this.ActionsPane.Controls.Add(actions);
Test de l'application
Vous pouvez maintenant tester votre document pour vérifier que le volet Actions apparaît lorsque le document est ouvert. Testez la relation maître/détail dans les contrôles sur le volet Actions, et assurez-vous que ces données sont insérées dans un tableau Word lorsque l'utilisateur clique sur le bouton Insérer.
Pour tester votre document
Appuyez sur F5 pour exécuter votre projet.
Vérifiez que le volet Actions est visible.
Sélectionnez une société dans la zone de liste déroulante et vérifiez que les éléments dans la zone de liste Produits changent.
Sélectionnez un produit, cliquez sur Insérer dans le volet Actions et vérifiez que les détails du produit sont ajoutés au tableau dans Word.
Insérez des produits supplémentaires de plusieurs sociétés.
Étapes suivantes
Cette procédure pas à pas présente les notions de base de la liaison des données aux contrôles dans un volet Actions dans Word. Vous devrez peut-être ensuite exécuter les opérations suivantes :
Déploiement du projet. Pour plus d'informations, consultez Comment : déployer des solutions Office (Office System 2003).
Liaison de données aux contrôles dans Excel. Pour plus d'informations, consultez Procédure pas à pas : liaison de données aux contrôles dans un volet Actions Excel.
Affichage et masquage de contrôles dans le volet Actions. Pour plus d'informations, consultez Procédure pas à pas : modification du volet Actions en fonction du contexte utilisateur.
Voir aussi
Tâches
Comment : ajouter un volet Actions à des documents Word