Partager via


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

  • Projets au niveau du document

Version de Microsoft Office

  • Word 2007

  • Word 2003

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

  1. Sélectionnez le projet My Word Actions Pane dans l'Explorateur de solutions.

  2. Dans le menu Projet, cliquez sur Ajouter un nouvel élément.

  3. 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

  1. 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.

  2. Cliquez sur Ajouter une nouvelle source de données pour démarrer l'Assistant Configuration de source de données.

  3. Sélectionnez Base de données, puis cliquez sur Suivant.

  4. 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.

  5. Cliquez sur Suivant.

  6. Désélectionnez l'option pour enregistrer la connexion si elle est sélectionnée, puis cliquez sur Suivant.

  7. Développez le nœud Tables dans la fenêtre Objets de base de données.

  8. Activez la case à cocher en regard des tables Suppliers et Products.

  9. 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

  1. Dans la fenêtre Sources de données, développez la table Suppliers.

  2. Cliquez sur la flèche de déroulement du nœud Company Name et sélectionnez ComboBox.

  3. 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.

  4. 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.

  5. 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.

  6. Dans la fenêtre Sources de données, développez la table Products, enfant de la table Suppliers.

  7. Cliquez sur la flèche de déroulement du nœud ProductName et sélectionnez ListBox.

  8. 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.

  9. 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.

  10. 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.

  11. 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

  12. 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

  1. 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);
    }
    
  2. 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

  1. Sélectionnez le contrôle CompanyNameComboBox.

  2. Dans la fenêtre Propriétés, cliquez sur le bouton à droite de la propriété DataSource et sélectionnez suppliersBindingSource.

  3. Cliquez sur le bouton à droite de la propriété DisplayMember et sélectionnez CompanyName.

  4. Développez la propriété DataBindings, cliquez sur le bouton à droite de la propriété Text et sélectionnez Aucun.

  5. Sélectionnez le contrôle ProductNameListBox.

  6. Dans la fenêtre Propriétés, cliquez sur le bouton à droite de la propriété DataSource et sélectionnez productsBindingSource.

  7. Cliquez sur le bouton à droite de la propriété DisplayMember et sélectionnez ProductName.

  8. 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

  1. 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);
        }
    }
    
  2. 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

  1. 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.

  2. 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();
    
  3. 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

  1. Appuyez sur F5 pour exécuter votre projet.

  2. Vérifiez que le volet Actions est visible.

  3. 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.

  4. 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.

  5. 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 :

Voir aussi

Tâches

Comment : ajouter un volet Actions à des documents Word

Concepts

Vue d'ensemble du volet Actions

Liaison de données aux contrôles