Share via


チュートリアル: Word の操作ウィンドウでコントロールにデータをバインドする

このチュートリアルでは、Word の操作ウィンドウ上のコントロールにデータをバインドする方法について説明します。 このコントロールは、SQL Server データベースのテーブル間のマスター/詳細の関係を示します。

適用対象: このトピックの情報は、Word のドキュメント レベルのプロジェクトに適用されます。 詳細については、「Office アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

このチュートリアルでは、次の作業について説明します。

  • データにバインドされた Windows フォーム コントロールを含む操作ウィンドウを作成する。

  • マスター/詳細関係を使用してコントロールにデータを表示する。

  • アプリケーションが開いたときに操作ウィンドウを表示する。

Note

次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。

前提条件

このチュートリアルを実行するには、次のコンポーネントが必要です。

  • Microsoft Office Developer Tools が含まれている Visual Studio のエディション。 詳細については、「Office ソリューションを開発できるようにコンピューターを構成する」を参照してください。

  • Word 2013 または Word 2010。

  • Northwind SQL Server サンプル データベースがあるサーバーへのアクセス。

  • SQL Server データベースに対する読み取りと書き込みのアクセス許可。

プロジェクトを作成する

最初に、Word 文書のプロジェクトを作成します。

新しいプロジェクトを作成するには

  1. My Word Actions Pane」という名前の Word 文書プロジェクトを作成します。 ウィザードで、[新規ドキュメントの作成] をクリックします。

    詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。

    新しい Word 文書が Visual Studio のデザイナーで開かれ、My Word Actions Pane プロジェクトがソリューション エクスプローラーに追加されます。

操作ウィンドウにコントロールを追加する

このチュートリアルでは、データ バインドされた Windows フォーム コントロールを含む操作ウィンドウ コントロールが必要です。 データ ソースをプロジェクトに追加し、[データ ソース] ウィンドウから操作ウィンドウ コントロールにコントロールをドラッグします。

操作ウィンドウ コントロールを追加するには

  1. ソリューション エクスプローラーで、[My Word Actions Pane] プロジェクトを選択します。

  2. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  3. [新しい項目の追加] ダイアログ ボックスで、[操作ウィンドウ コントロール] を選択し、名前を ActionsControl と指定して、[追加] をクリックします。

プロジェクトにデータ ソースを追加するには

  1. [データ ソース] ウィンドウが表示されていない場合は、メニュー バーで [表示]>[その他のウィンドウ]>[データ ソース] をクリックして表示します。

    Note

    [データ ソースの表示] が使用できない場合は、Word 文書をクリックし、もう一度確認します。

  2. [新しいデータ ソースの追加] をクリックしてデータ ソース構成ウィザードを開始します。

  3. [データベース] を選択し、[次へ] をクリックします。

  4. SQL Server の Northwind サンプル データベースへのデータ接続を選択するか、または [新しい接続] ボタンを使用して新しい接続を追加します。

  5. 次へ をクリックします。

  6. 接続を保存するオプションがオンになっている場合は、それをオフにして、[次へ] をクリックします。

  7. [データベース オブジェクト] ウィンドウで、[Tables] ノードを展開します。

  8. Suppliers テーブルと Products テーブルの隣にあるチェック ボックスをオンにします。

  9. [完了] をクリックします。

    ウィザードにより、Suppliers テーブルと Products テーブルが [データ ソース] ウィンドウに追加されます。 また、ソリューション エクスプローラーに表示される、型指定されたデータセットがプロジェクトに追加されます。

データ バインドされた Windows フォーム コントロールを操作ウィンドウ コントロールに追加するには

  1. [データ ソース] ウィンドウで、Suppliers テーブルを展開します。

  2. [Company Name] ノードのドロップダウン矢印をクリックし、[ComboBox] を選択します。

  3. [データ ソース] ウィンドウから操作ウィンドウ コントロールに CompanyName をドラッグします。

    操作ウィンドウ コントロールに ComboBox コントロールが作成されます。 同時に、SuppliersBindingSource という名前の BindingSource、テーブル アダプター、および DataSet がプロジェクトのコンポーネント トレイに追加されます。

  4. コンポーネント トレイで SuppliersBindingNavigator を選択し、Delete キーを押します。 このチュートリアルでは SuppliersBindingNavigator を使用しません。

    Note

    SuppliersBindingNavigator を削除しても、それのために生成されたコードがすべて削除されるわけではありません。 このコードは削除できます。

  5. コンボ ボックスをラベルの下に移動し、Size プロパティを 171, 21 に変更します。

  6. [データ ソース] ウィンドウで、Suppliers テーブルの子である Products テーブルを展開します。

  7. [ProductName] ノードのドロップダウン矢印をクリックし、[ListBox] を選択します。

  8. 操作ウィンドウ コントロールに ProductName をドラッグします。

    操作ウィンドウ コントロールに ListBox コントロールが作成されます。 同時に、ProductBindingSource という名前の BindingSource、およびテーブル アダプターがプロジェクトのコンポーネント トレイに追加されます。

  9. リスト ボックスをラベルの下に移動し、Size プロパティを 171,95 に変更します。

  10. [ツールボックス] から操作ウィンドウ コントロールに Button をドラッグし、リスト ボックスの下に配置します。

  11. Button を右クリックし、ショートカット メニューの [プロパティ] をクリックして、次のプロパティを変更します。

    プロパティ
    名前 [挿入]
    テキスト [挿入]
  12. ユーザー コントロールのサイズを、コントロールに合わせて変更します。

データ ソースを設定する

データ ソースを設定するには、操作ウィンドウ コントロールの Load イベントにコードを追加して、コントロールに DataTable のデータを読み込み、各コントロールの DataSource プロパティと DataMember プロパティを設定します。

コントロールにデータを読み込むには

  1. ActionsControl クラスの Load イベント ハンドラーに次のコードを追加します。

    private void ActionsControl_Load(object sender, EventArgs e)
    {
        this.suppliersTableAdapter.Fill(this.northwindDataSet.Suppliers);
        this.productsTableAdapter.Fill(this.northwindDataSet.Products);
    }
    
  2. C# では、このイベント ハンドラーを Load イベントにアタッチする必要があります。 このコードは、ActionsControl コンストラクター内の、InitializeComponent の呼び出しの後に配置できます。 イベント ハンドラーの作成方法の詳細については、「方法: Office プロジェクトでイベント ハンドラーを作成する」を参照してください。

    this.Load += new EventHandler(ActionsControl_Load);
    

コントロールのデータ バインディング プロパティを設定するには

  1. CompanyNameComboBox コントロールを選択します。

  2. [プロパティ] ウィンドウで、DataSource プロパティの右側にあるボタンをクリックし、suppliersBindingSource を選択します。

  3. DisplayMember プロパティの右側にあるボタンをクリックし、CompanyName を選択します。

  4. DataBindings プロパティを展開し、Text プロパティの右側にあるボタンをクリックして、[なし] を選択します。

  5. ProductNameListBox コントロールを選択します。

  6. [プロパティ] ウィンドウで、DataSource プロパティの右側にあるボタンをクリックし、productsBindingSource を選択します。

  7. DisplayMember プロパティの右側にあるボタンをクリックし、ProductName を選択します。

  8. DataBindings プロパティを展開し、SelectedValue プロパティの右側にあるボタンをクリックして、[なし] を選択します。

テーブルにデータを挿入するメソッドを追加する

次のタスクは、バインドされたコントロールからデータを読み取り、Word 文書のテーブルにデータを挿入することです。 まず、テーブルの見出しを書式設定するためのプロシージャを作成してから、Word のテーブルを作成して書式設定するための AddData メソッドを追加します。

テーブルの見出しの書式を設定するには

  1. ActionsControl クラスで、テーブルの見出しの書式を設定するメソッドを作成します。

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

テーブルを作成するには

  1. ActionsControl クラスで、テーブルがまだ存在しない場合にテーブルを作成し、操作ウィンドウからテーブルにデータを追加するメソッドを記述します。

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

Word のテーブルにテキストを挿入するには

  1. [Insert] ボタンの Click イベント ハンドラーに次のコードを追加します。

    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. C# では、ボタンの Click イベントのイベント ハンドラーを作成する必要があります。 このコードは、ActionsControl クラスの Load イベント ハンドラー内に配置できます。

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

操作ウィンドウを表示する

操作ウィンドウは、コントロールが追加されると表示されます。

操作ウィンドウを表示するには

  1. ソリューション エクスプローラーThisDocument.vb または ThisDocument.cs を右クリックし、ショートカット メニューの [コードの表示] をクリックします。

  2. 次の例のように、ThisDocument クラスの上部にコントロールの新しいインスタンスを作成します。

    private ActionsControl actions = new ActionsControl();
    
  3. 次の例のように、ThisDocumentStartup イベント ハンドラーにコードを追加します。

    this.ActionsPane.Controls.Add(actions);
    

アプリケーションをテストする

それでは、文書をテストして、文書を開いたときに操作ウィンドウが表示されることを確認しましょう。 操作ウィンドウのコントロールのマスター/詳細関係をテストし、[Insert] ボタンがクリックされたときに Word のテーブルにデータが挿入されることを確認します。

文書をテストするには

  1. F5 キーを押してプロジェクトを実行します。

  2. 操作ウィンドウが表示されていることを確認します。

  3. コンボ ボックスで会社を選択して、[Products] リスト ボックス内の項目が変化することを確認します。

  4. 製品を選択し、操作ウィンドウの [Insert] をクリックして、Word のテーブルに製品の詳細が追加されることを確認します。

  5. さまざまな会社から追加の製品を挿入します。

次のステップ

このチュートリアルでは、Word の操作ウィンドウ上のコントロールにデータをバインドする方法の基本について説明しました。 ここでは、次の作業を行います。