Procedura dettagliata: associazione di dati a controlli in un riquadro delle azioni di Word
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.
Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento per Word 2007 e Word 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.
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 Gestione delle impostazioni.
Prerequisiti
Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:
-
Una versione di Visual Studio 2010 che include gli strumenti per sviluppatori di Microsoft Office. Per ulteriori informazioni, vedere [Configurazione di un computer per sviluppare soluzioni Office](bb398242\(v=vs.100\).md).
Word 2007 o Word 2010.
Accesso a un server in cui sia presente il database di esempio di SQL Server Northwind.
Autorizzazioni per leggere il database SQL Server o scrivere in esso.
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 Procedura: creare progetti di Office in Visual Studio.
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
Selezionare il progetto My Word Actions Pane in Esplora soluzioni.
Scegliere Aggiungi nuovo elemento dal menu Progetto.
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
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.
Scegliere Aggiungi nuova origine dati per avviare la Configurazione guidata origine dati.
Selezionare Database e scegliere Avanti.
Selezionare una connessione dati al database di SQL Server di esempio Northwind oppure aggiungere una nuova connessione tramite il pulsante Nuova connessione.
Fare clic su Avanti.
Se selezionata, deselezionare l'opzione per salvare la connessione, quindi scegliere Avanti.
Espandere il nodo Tabelle nella finestra Oggetti database.
Selezionare la casella di controllo accanto alle tabelle Suppliers e Products.
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
Espandere la tabella Suppliers nella finestra Origini dati.
Fare clic sulla freccia a discesa sul nodo Company Name e selezionare ComboBox.
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.
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.
Spostare la casella combinata in modo da posizionarla sotto l'etichetta e modificare la proprietà Size in 171, 21.
Nella finestra Origini dati espandere la tabella Products figlia della tabella Suppliers.
Fare clic sulla freccia a discesa sul nodo ProductName e selezionare ListBox.
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.
Spostare la casella di riepilogo in modo da posizionarla sotto l'etichetta e modificare la proprietà Size in 171, 95.
Trascinare una classe Button dalla Casella degli strumenti sul controllo riquadro azioni e posizionarla sotto la casella di riepilogo.
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
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
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); }
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 progetti di Office.
this.Load += new EventHandler(ActionsControl_Load);
Per impostare le proprietà di associazione dati dei controlli
Fare clic sul controllo CompanyNameComboBox.
Fare clic sul pulsante a destra della proprietà DataSource nella finestra Proprietà e scegliere suppliersBindingSource.
Fare clic sul pulsante a destra della proprietà DisplayMember e scegliere CompanyName.
Espandere la proprietà DataBindings, fare clic sul pulsante a destra della proprietà Text e selezionare None.
Fare clic sul controllo ProductNameListBox.
Fare clic sul pulsante a destra della proprietà DataSource nella finestra Proprietà e scegliere productsBindingSource.
Fare clic sul pulsante a destra della proprietà DisplayMember e scegliere ProductName.
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
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); } }
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
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.
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();
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);
Verifica 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
Premere F5 per eseguire il progetto.
Verificare che il riquadro delle azioni sia visibile.
Selezionare una società nella casella combinata e verificare che le voci nella casella di riepilogo Products cambino.
Selezionare un prodotto, fare clic su Insert nel riquadro delle azioni e verificare che i dettagli del prodotto vengano aggiunti alla tabella in Word.
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 attività che potrebbero essere eseguite successivamente:
Associazione di dati ai controlli in Excel. Per ulteriori informazioni, vedere Procedura dettagliata: associazione di dati a controlli in un riquadro delle azioni di Excel.
Attivazione e disattivazione della visualizzazione di controlli nel riquadro delle azioni. Per ulteriori informazioni, vedere Procedura dettagliata: modifica del riquadro delle azioni in base al contesto dell'utente.
Distribuzione del progetto. Per ulteriori informazioni, vedere Cenni preliminari sulla distribuzione (sviluppo per Office in Visual Studio).
Vedere anche
Attività
Procedura: aggiungere un riquadro per le azioni nei documenti di Word