Sdílet prostřednictvím


Návod: Svázání dat s ovládacími prvky v podokně akcí aplikace Word

Tento návod ukazuje datové vazby pro ovládací prvky na ukotvené podokno akcí v aplikaci Word.Ovládací prvky prokázat vztah seznam–podrobnosti mezi tabulkami v databázi serveru SQL Server.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni dokumentu ve Wordu 2013 a ve Wordu 2010. Další informace najdete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

Tento návod ilustruje následující úkoly:

  • Vytváření ukotvené podokno akcí s ovládacími prvky model Windows Forms, které jsou vázány na data.

  • Pomocí vztahu seznam podrobnosti k zobrazení dat v ovládacích prvcích.

  • Zobrazte podokno akcí při otevření aplikace.

[!POZNÁMKA]

Váš počítač může zobrazit jiné názvy nebo umístění pro některé prvky uživatelského rozhraní sady Visual Studio v následujících pokynech.Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením.Další informace naleznete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Požadavky

Chcete-li dokončit tento návod, potřebujete následující komponenty:

  • Edice Visual Studia 2013, která zahrnuje nástroje Microsoft Office Developer Tools. Další informace najdete v tématu Konfigurace počítače pro vývoj řešení pro systém Office.

  • Word 2013 nebo Word 2010.

  • Přístup k serveru s ukázkovou databází serveru SQL Northwind.

  • Oprávnění číst a zapisovat do databáze serveru SQL Server.

Vytváření projektu

První krok je vytvořit projekt dokumentu aplikace Word.

Chcete-li vytvořit nový projekt

Přidání ovládacích prvků do podokna akcí

Pro tento návod potřebujete ovládací prvek podokna akce, který obsahuje ovládací prvky model Windows Forms s vazbou na data.Do projektu přidat zdroj dat a potom přetáhněte ovládací prvky z Zdroje dat okno Ovládací prvek podokna akcí.

Chcete-li přidat ovládací prvek podokna akcí

  1. Vyberte Můj podokno akcí aplikace Word projektu v Průzkumníku.

  2. V nabídce Projekt klikněte na příkaz Přidat novou položku.

  3. V Přidat novou položku dialogové okno, vyberte Ovládací prvek podokna akcí, pojmenujte jej ActionsControla potom klepněte na tlačítko Přidat.

Chcete-li přidat zdroj dat do projektu

  1. Pokud Zdroje dat okno není zobrazen, zobrazit, na nabídek, výběr zobrazení, Ostatní okna, Zdroje dat.

    [!POZNÁMKA]

    Pokud Zobrazit zdroje dat není k dispozici, klepněte na dokument aplikace Word a znovu zkontrolovat.

  2. Klepněte na tlačítko Přidat nový zdroj dat ke spuštění Průvodce konfigurací zdroje dat.

  3. Vyberte databáze a potom klepněte na tlačítko Další.

  4. Vyberte datové připojení k ukázkové databázi SQL Server Northwind nebo přidat nové připojení pomocí Nové připojení tlačítko.

  5. Klepněte na tlačítko Další.

  6. Zrušte možnost uložení připojení, pokud je zaškrtnuto a potom klepněte na tlačítko Další.

  7. Rozbalte tabulky uzlu databázových objektů okna.

  8. Zaškrtněte políčko vedle Dodavatelé a produkty tabulky.

  9. Klepněte na tlačítko Dokončit.

Průvodce přidá Dodavatelé tabulky a produkty tabulky Zdroje dat okna.Také přidá definované datové sady do projektu, který je viditelný v Průzkumníku.

Chcete-li přidat ovládací prvky model Windows Forms s vazbou na data na ovládací prvek podokna akcí

  1. V Zdroje dat okno, rozbalte Dodavatelé tabulky.

  2. Klepněte na šipku rozevíracího seznamu Firma uzlu a vyberte pole se seznamem.

  3. Přetáhněte firma z Zdroje dat okno Ovládací prvek podokna akcí.

    A ComboBox ovládací prvek je vytvořen na ovládací prvek podokna akcí.Ve stejnou dobu BindingSource s názvem SuppliersBindingSource, s adaptérem tabulce a DataSet jsou přidány do projektu v okně komponent.

  4. Vyberte SuppliersBindingNavigator v součást zásobník a stiskněte klávesu DELETE.Nebudete používat SuppliersBindingNavigator v tomto návodu.

    [!POZNÁMKA]

    Odstranění SuppliersBindingNavigator neodstraní všechny kód, který byl pro něj vytvořen.Chcete-li odstranit tento kód.

  5. Přesunout pole se seznamem tak, aby byla podle popisku a změnit velikost vlastnost 171, 21.

  6. V Zdroje dat okno, rozbalte produkty tabulka, která je podřízena Dodavatelé tabulky.

  7. Klepněte na šipku rozevíracího seznamu ProductName uzlu a vyberte ListBox.

  8. Přetáhněte ProductName na ovládací prvek podokna akcí.

    A ListBox ovládací prvek je vytvořen na ovládací prvek podokna akcí.Ve stejnou dobu BindingSource s názvem ProductBindingSource a adaptér tabulky jsou přidány do projektu v okně komponent.

  9. Přemístit seznam tak, aby byla podle popisku a změnit velikost vlastnost 171,95.

  10. Přetáhněte Button z nástrojů do podokna akce ovládacího prvku a umístěte jej pod poli se seznamem.

  11. Klepněte pravým tlačítkem myši Button, klepněte na tlačítko Vlastnosti v místní nabídce a změnit následující vlastnosti.

    Property

    Value

    Název

    Insert

    Text

    Insert

  12. Změna velikosti uživatelského ovládacího prvku tak, aby odpovídala ovládací prvky.

Nastavení zdroje dat

Chcete-li nastavit zdroj dat, přidejte kód, který Load událostí ovládací prvek podokna akcí k naplnění ovládacího prvku s daty z DataTablea nastavte DataSource a DataMember vlastnosti pro každý ovládací prvek.

Chcete-li načíst ovládací prvek s daty

  1. V Load obslužné rutiny ActionsControl třída, přidejte následující kód.

    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. V jazyce C#, je nutné připojit obslužnou rutinu události Load události.Můžete umístit tento kód ActionsControl konstruktor po volání InitializeComponent.Další informace o vytváření obslužných rutin událostí naleznete v tématu Postupy: Vytváření obslužných rutin událostí v projektech pro systém Office.

    this.Load += new EventHandler(ActionsControl_Load);
    

Chcete-li nastavit vlastnosti vazby dat ovládacích prvků

  1. Vyberte ovládací prvek CompanyNameComboBox.

  2. V Vlastnosti okno, klepněte na tlačítko napravo od zdroje dat vlastnosti a vyberte suppliersBindingSource.

  3. Klepněte na tlačítko napravo od DisplayMember vlastnosti a vyberte firma.

  4. Rozbalte datové vazby vlastnost, klepněte na tlačítko napravo od textu vlastnosti a vyberte žádný.

  5. Vyberte ovládací prvek ProductNameListBox.

  6. V Vlastnosti okno, klepněte na tlačítko napravo od zdroje dat vlastnosti a vyberte productsBindingSource.

  7. Klepněte na tlačítko napravo od DisplayMember vlastnosti a vyberte ProductName.

  8. Rozbalte datové vazby vlastnost, klepněte na tlačítko napravo od vlastnost SelectedValue vlastnosti a vyberte žádný.

Přidání metody pro vkládání dat do tabulky

Dalším úkolem je číst data vázané ovládací prvky a vyplnění tabulky v dokumentu aplikace Word.Nejprve vytvořte proceduru pro formátování nadpisů v tabulce a pak přidejte AddData metodu k vytvoření a formátování tabulky aplikace Word.

Chcete-li formátovat záhlaví tabulky

  • V ActionsControl třídy, vytvořte metodu, chcete-li formátovat záhlaví tabulky.

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

Chcete-li vytvořit tabulku

  • V ActionsControl třídy, metody, která vytvoří tabulku, je-li jeden ještě existují a přidat data v podokně Akce do tabulky zapsat.

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

Chcete-li text vložit do tabulky aplikace Word

  1. Přidejte následující kód, který Click obslužné rutiny Vložení tlačítko.

    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. V jazyce C#, je nutné vytvořit obslužnou rutinu události Click události tlačítka.Můžete umístit tento kód Load obslužné rutiny ActionsControl třídy.

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

Zobrazení podokna akcí

V podokně akcí se zobrazí po přidání ovládacích prvků do ní.

Chcete-li zobrazit podokno akcí

  1. V Průzkumníku, klepněte pravým tlačítkem ThisDocument.vb nebo ThisDocument.csa potom klepněte na tlačítko Zobrazit kód v místní nabídce.

  2. Vytvořte novou instanci ovládacího prvku v horní části ThisDocument třídy tak, že vypadá jako v následujícím příkladu.

    Dim actions As New ActionsControl
    
    private ActionsControl actions = new ActionsControl();
    
  3. Přidejte kód, který Startup obslužné rutiny události z ThisDocument tak, že vypadá jako v následujícím příkladu.

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

Testování aplikace

Nyní můžete otestovat ověřte, že při otevření dokumentu se zobrazí v podokně Akce dokumentu.Otestovat vztah seznam/podrobnosti v ovládacích prvcích v podokně akcí a ujistěte se, že dat je naplněna ve slově tabulky, kdy Vložení klepnutí na tlačítko.

Chcete-li otestovat dokumentu

  1. Stisknutím klávesy F5 spustíte váš projekt.

  2. Potvrďte, že je zobrazen v podokně akcí.

  3. Vyberte společnost, v poli se seznamem a ověřte, zda položky v produkty seznam pole změnit.

  4. Vyberte produkt, klepněte na tlačítko Vložení v podokně akcí a ověřte, zda jsou podrobnosti o produktu přidány do tabulky v aplikaci Word.

  5. Vložte další produkty od různých společností.

Další kroky

Tento návod ukazuje základní informace o navázání dat na ovládací prvky na ukotvené podokno akcí v aplikaci Word.Zde jsou některé úkoly, které by mohly přijít Další:

Viz také

Úkoly

Postupy: Přidání podokna akcí do dokumentů aplikace Word nebo sešitů aplikace Excel

Další zdroje

Přehled podokna akcí

Vázání dat k ovládacím prvkům v řešeních pro systém Office