Procedura dettagliata: associazione di dati a controlli in un riquadro delle azioni di Word

Aggiornamento: novembre 2007

Si applica a

Le informazioni contenute in questo argomento riguardano solo i progetti Visual Studio Tools per Office e le versioni di Microsoft Office specificati.

Tipo di progetto

  • Progetti a livello di documento

Versione Microsoft Office

  • Word 2007

  • Word 2003

Per ulteriori informazioni, vedere la classe Funzionalità disponibili in base ai tipi di progetto e applicazione.

In questa procedura dettagliata verrà illustrata l'associazione dati ai controlli in un riquadro azioni in Microsoft Office Word. I controlli mostrano una relazione Master-Details tra le tabelle in un database SQL Server.

In questa procedura dettagliata vengono illustrate le attività seguenti:

  • Creazione di un riquadro azioni con i controlli Windows Form associati a dati.

  • Utilizzo di una relazione Master-Details per la visualizzazione dei dati nei controlli.

  • Visualizzazione del riquadro delle azioni all'apertura dell'applicazione.

Nota:

Il computer potrebbe mostrare nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio in uso e le impostazioni utilizzate determinano questi elementi. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei seguenti componenti:

  • Visual Studio Tools per Office (componente facoltativo di Visual Studio 2008 Professional e Visual Studio Team System).

  • Microsoft Office Word 2003 o Microsoft Office Word 2007.

  • Accesso a un server su cui sia presente Northwind, un database di esempio di SQL Server.

  • Autorizzazioni per leggere il database SQL Server o scrivere in esso.

Visual Studio Tools per Office viene installato per impostazione predefinita con le versioni di Visual Studio elencate. Per controllare se è installato, vedere Installazione di Visual Studio Tools per Office.

Creazione del progetto

Il primo passaggio consiste nella creazione di un progetto Documento di Word.

Per creare un nuovo progetto

  • Creare un progetto Documento di Word denominato My Word Actions Pane. Nella procedura guidata, scegliere Crea un nuovo documento.

    Per ulteriori informazioni, vedere la classe Procedura: creare progetti Visual Studio Tools per Office.

    Il nuovo documento di Word verrà aperto nella finestra di progettazione e il progetto My Word Actions Pane verrà aggiunto in Esplora soluzioni.

Aggiunta di controlli al riquadro delle azioni

Per questa procedura dettagliata è necessario un controllo riquadro azioni contenente controlli Windows Form con associazione dati. Aggiungere un'origine dati al progetto, quindi trascinare i controlli dalla finestra Origini dati sul controllo riquadro azioni.

Per aggiungere un controllo riquadro azioni

  1. Selezionare il progetto My Word Actions Pane in Esplora soluzioni.

  2. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  3. Fare clic su Controllo riquadro azioni nella finestra di dialogo Controllo riquadro azioni, assegnare al controllo il nome ActionsControl e fare clic su Aggiungi.

Per aggiungere una nuova origine dati al progetto

  1. Se la finestra Origini dati non è visibile, scegliere Mostra origini dati dal menu Dati.

    Nota:

    Se l'opzione Mostra origini dati non è visibile, fare clic nel documento di Word ed effettuare di nuovo la selezione.

  2. Scegliere Aggiungi nuova origine dati per avviare la Configurazione guidata origine dati.

  3. Selezionare Database e scegliere Avanti.

  4. Selezionare una connessione dati al database di SQL Server di esempio Northwind oppure aggiungere una nuova connessione tramite il pulsante Nuova connessione.

  5. Fare clic su Avanti.

  6. Se selezionata, deselezionare l'opzione per salvare la connessione, quindi scegliere Avanti.

  7. Espandere il nodo Tabelle nella finestra Oggetti database.

  8. Selezionare la casella di controllo accanto alle tabelle Suppliers e Products.

  9. Fare clic su Fine.

Con la procedura guidata verranno aggiunte le tabelle Suppliers e Products alla finestra Origini dati. Inoltre, aggiungerà un DataSet tipizzato al progetto visualizzato in Esplora soluzioni.

Per aggiungere controlli Windows Form con associazione dati a un controllo riquadro azioni

  1. Espandere la tabella Suppliers nella finestra Origini dati.

  2. Fare clic sulla freccia a discesa sul nodo Company Name e selezionare ComboBox.

  3. Trascinare CompanyName dalla finestra Origini dati sul controllo riquadro azioni.

    Verrà creato un controllo ComboBox sul controllo riquadro azioni. Contemporaneamente, una classe BindingSource denominata SuppliersBindingSource, un adattatore di tabelle e una classe DataSet verranno aggiunti al progetto sulla barra dei componenti.

  4. Selezionare SuppliersBindingNavigator sulla barra dei componenti e premere CANC. In questa procedura dettagliata il controllo SuppliersBindingNavigator non verrà utilizzato.

    Nota:

    L'eliminazione del controllo SuppliersBindingNavigator non implica la rimozione di tutto il codice appositamente generato. Questo codice può essere rimosso.

  5. Spostare la casella combinata in modo da posizionarla sotto l'etichetta e modificare la proprietà Size in 171, 21.

  6. Nella finestra Origini dati espandere la tabella Products figlia della tabella Suppliers.

  7. Fare clic sulla freccia a discesa sul nodo ProductName e selezionare ListBox.

  8. Trascinare ProductName sul controllo riquadro azioni.

    Verrà creato un controllo ListBox sul controllo riquadro azioni. Contemporaneamente, una classe BindingSource denominata ProductBindingSource e un adattatore di tabelle verranno aggiunti al progetto sulla barra dei componenti.

  9. Spostare la casella di riepilogo in modo da posizionarla sotto l'etichetta e modificare la proprietà Size in 171,95.

  10. Trascinare una classe Button dalla Casella degli strumenti sul controllo riquadro azioni e posizionarla sotto la casella di riepilogo.

  11. Fare clic con il pulsante destro del mouse su Button, scegliere Proprietà dal menu di scelta rapida e modificare le seguenti proprietà.

    Proprietà

    Valore

    Nome

    Insert

    Text

    Insert

  12. Ridimensionare il controllo utente per adattarlo ai controlli.

Impostazione dell'origine dati

Per impostare l'origine dati, aggiungere il codice all'evento Load del controllo riquadro azioni per riempire il controllo con i dati di DataTable e impostare le proprietà DataSource e DataMember per ciascun controllo.

Per caricare il controllo con i dati

  1. Aggiungere il codice riportato di seguito nel gestore eventi Load della classe ActionsControl.

    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. In C# è necessario collegare il gestore eventi all'evento Load. È possibile inserire il codice nel costruttore ActionsControl, dopo la chiamata a InitializeComponent. Per ulteriori informazioni sulla creazione di gestori eventi, vedere Procedura: creare gestori eventi in Visual Studio Tools per Office.

    this.Load += new EventHandler(ActionsControl_Load);
    

Per impostare le proprietà di associazione dati dei controlli

  1. Fare clic sul controllo CompanyNameComboBox.

  2. Fare clic sul pulsante a destra della proprietà DataSource nella finestra Proprietà e scegliere suppliersBindingSource.

  3. Fare clic sul pulsante a destra della proprietà DisplayMember e scegliere CompanyName.

  4. Espandere la proprietà DataBindings, fare clic sul pulsante a destra della proprietà Text e selezionare None.

  5. Fare clic sul controllo ProductNameListBox.

  6. Fare clic sul pulsante a destra della proprietà DataSource nella finestra Proprietà e scegliere productsBindingSource.

  7. Fare clic sul pulsante a destra della proprietà DisplayMember e scegliere ProductName.

  8. Espandere la proprietà DataBindings, fare clic sul pulsante a destra della proprietà SelectedValue e selezionare None.

Aggiunta di un metodo per inserire dati in una tabella

In questa attività verranno letti i dati dei controlli associati e verrà compilata una tabella nel documento di Word. Verrà creata innanzitutto una procedura per formattare le intestazioni della tabella, quindi verrà aggiunto il metodo AddData per creare e formattare una tabella di Word.

Per formattare le intestazioni di tabella

  • Nella classe ActionsControl creare un metodo per formattare le intestazioni della tabella.

    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;
    }
    

Per creare la tabella

  • Nella classe ActionsControl scrivere un metodo per creare una tabella, se non ne esiste già una, e aggiungere i dati del riquadro delle azioni alla tabella.

    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);
        }
    }
    

Per inserire testo in una tabella di Word

  1. Aggiungere il codice riportato di seguito al gestore eventi Click del pulsante Insert.

    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. Per C#, è necessario creare un gestore eventi per l'evento Click del pulsante. È possibile inserire il codice nel gestore eventi Load della classe ActionsControl.

    this.Insert.Click += new EventHandler(Insert_Click);
    

Visualizzazione del riquadro delle azioni

Il riquadro diventa visibile una volta che vi sono stati aggiunti i controlli.

Per visualizzare il riquadro delle azioni

  1. Fare clic con il pulsante destro del mouse su ThisDocument.vb o ThisDocument.cs in Esplora soluzioni e scegliere Visualizza codice dal menu di scelta rapida.

  2. Creare una nuova istanza del controllo all'inizio della classe ThisDocument in modo che risulti simile all'esempio seguente.

    Dim actions As New ActionsControl
    
    private ActionsControl actions = new ActionsControl();
    
  3. Aggiungere il codice al gestore eventi Startup di ThisDocument in modo che risulti simile all'esempio seguente.

    Me.ActionsPane.Controls.Add(actions)
    
    this.ActionsPane.Controls.Add(actions);
    

Test dell'applicazione

A questo punto, è possibile eseguire il test del documento per verificare che il riquadro delle azioni venga visualizzato quando viene aperto il documento. Verificare la relazione master-dettagli nei controlli del riquadro delle azioni e accertarsi che i dati vengano inseriti in una tabella di Word quando si fa clic sul pulsante Insert.

Per testare il documento

  1. Premere F5 per eseguire il progetto.

  2. Verificare che il riquadro delle azioni sia visibile.

  3. Selezionare una società nella casella combinata e verificare che le voci nella casella di riepilogo Products cambino.

  4. Selezionare un prodotto, fare clic su Insert nel riquadro delle azioni e verificare che i dettagli del prodotto vengano aggiunti alla tabella in Word.

  5. Inserire ulteriori prodotti di altre società.

Passaggi successivi

In questa procedura dettagliata sono state fornite le nozioni di base per l'associazione di dati ai controlli di un riquadro delle azioni in Word. Di seguito sono elencate alcune procedure che potrebbero essere necessarie per estendere il progetto:

Vedere anche

Attività

Procedura: aggiungere un riquadro per le azioni nei documenti di Word

Concetti

Cenni preliminari sul riquadro delle azioni

Associazione di dati ai controlli