次の方法で共有


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

重要

アクション機能は Office 2024 で廃止されました。

この機能は、次のリリースの Office でのみ使用できます。

  • Microsoft 365
  • Office LTSC Professional Plus 2021
  • Office LTSC Standard 2021
  • Office Professional Plus 2016、2019
  • Office Standard 2016、2019

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

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

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

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

  • マスター/詳細リレーションシップを使用してコントロールにデータを表示する。

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

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

前提条件

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

  • Microsoft Office 開発者ツールを含む Visual Studio のエディション。 詳細については、「 Office ソリューションを開発するためのコンピューターの構成」を参照してください。

  • Word 2013 または Word 2010 .

  • Northwind SQL Server サンプル データベースを使用したサーバーへのアクセス。

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

プロジェクトを作成する

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

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

  1. [ マイ ワード 操作ウィンドウ] という名前の Word 文書プロジェクトを作成します。 ウィザードで、[ 新しいドキュメントの作成] を選択します。

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

    Visual Studio は、デザイナーで新しい Word 文書を開き、 個人用 Word 操作ウィンドウ プロジェクトを ソリューション エクスプローラーに追加します。

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

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

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

  1. ソリューション エクスプローラーで [Word 操作ウィンドウ] プロジェクトを選択します。

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

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

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

  1. [データ ソース] ウィンドウが表示されない場合は、メニュー バーの [表示]、[その他の Windows>>Data ソース] の順に選択して表示します。

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

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

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

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

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

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

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

  8. 仕入先テーブルと製品テーブルの横にあるチェック ボックスをオンにします。

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

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

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

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

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

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

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

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

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

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

  6. [データ ソース] ウィンドウで、[仕入先] テーブルの子である 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 イベントにアタッチする必要があります。 このコードは、InitializeComponentの呼び出しの後に、ActionsControl コンストラクターに配置できます。 イベント ハンドラーを作成する方法の詳細については、「 方法: 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. [挿入] ボタンの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);
    

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

これで、ドキュメントをテストして、ドキュメントを開いたときに操作ウィンドウが表示されることを確認できます。 操作ウィンドウのコントロールでマスター/詳細リレーションシップをテストし、[ 挿入 ] ボタンがクリックされたときに Word テーブルにデータが入力されていることを確認します。

ドキュメントをテストするには

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

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

  3. コンボ ボックスで会社を選択し、[ 製品 ] リスト ボックスの項目が変更されることを確認します。

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

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

次のステップ

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