チュートリアル : アプリケーション レベルのプロジェクトでの単純データ バインディング
アプリケーション レベルのプロジェクトでは、ホスト コントロールと Windows フォーム コントロールにデータをバインドできます。 このチュートリアルでは、実行時に Microsoft Office Word 文書にコントロールを追加し、そのコントロールをデータにバインドする方法を説明します。
対象: このトピックの情報は、Word 2007 と Word 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
実行時、文書に ContentControl を追加する。
データセットのインスタンスにコントロールを接続する BindingSource を作成する。
ユーザーがレコード間をスクロールし、コントロールで表示できるようにする。
注意
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office 開発者ツールを含むエディションの Visual Studio 2010。 詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.100\).md)」を参照してください。
Word 2007 または Word 2010
AdventureWorksLT サンプル データベースが関連付けられている SQL Server 2005 または SQL Server 2005 Express の実行中のインスタンスへのアクセス。 AdventureWorksLT データベースは、CodePlex の Web サイトからダウンロードできます。 データベースを関連付ける方法の詳細については、以下のトピックを参照してください。
SQL Server Management Studio または SQL Server Management Studio Express を使用してデータベースを関連付ける方法については、「データベースをアタッチする方法 (SQL Server Management Studio)」を参照してください。
コマンド ラインを使用してデータベースを関連付ける方法については、「データベース ファイルを SQL Server Express にアタッチする方法」を参照してください。
新規プロジェクトの作成
まず、Word アドイン プロジェクトを作成します。
新しいプロジェクトを作成するには
Visual Basic または C# を使用して、Populating Documents from a Database という名前の Word アドイン プロジェクトを作成します。
詳細については、「方法: Visual Studio で Office プロジェクトを作成する」を参照してください。
Visual Studio は ThisAddIn.vb ファイルまたは ThisAddIn.cs ファイルを開き、Populating Documents from a Database プロジェクトをソリューション エクスプローラーに追加します。
プロジェクトが .NET Framework 4 を対象としている場合は、Microsoft.Office.Tools.Word.v4.0.Utilities.dll アセンブリへの参照を追加します。 この参照は、このチュートリアルの後半で Windows フォーム コントロールをドキュメントにプログラムで追加するのに必要です。
データ ソースの作成
[データ ソース] ウィンドウを使用して型指定されたデータセットをプロジェクトに追加します。
型指定されたデータセットをプロジェクトに追加するには
[データ] メニューの [新しいデータ ソースの追加] をクリックします。
データ ソース構成ウィザードが開きます。
[データベース] をクリックし、[次へ] をクリックします。
AdventureWorksLT データベースへの接続が既に設定されている場合は、その接続を選択し、[次へ] をクリックします。
それ以外の場合は、[新しい接続] をクリックし、[接続の追加] ダイアログ ボックスを使用して新しい接続を作成します。 詳細については、「方法 : データベース内のデータに接続する」を参照してください。
[アプリケーション構成ファイルに接続文字列を保存] ページで、[次へ] をクリックします。
[データベース オブジェクトの選択] ページで、[テーブル] を展開し、[Customer (SalesLT)] を選択します。
[完了] をクリックします。
AdventureWorksLTDataSet.xsd ファイルがソリューション エクスプローラーに追加されます。 このファイルでは、次の項目を定義します。
AdventureWorksLTDataSet という名前の型指定されたデータセット。 このデータセットは、AdventureWorksLT データベースの Customer (SalesLT) テーブルの内容を表します。
CustomerTableAdapter という名前の TableAdapter。 TableAdapter は、AdventureWorksLTDataSet のデータを読み書きするために使用します。 詳細については、「TableAdapter の概要」を参照してください。
これらのオブジェクトはどちらもこのチュートリアルの後半で使用します。
コントロールの作成とデータへのコントロールのバインド
このチュートリアルでデータベース レコードの表示に使用するインターフェイスは基本的なもので、文書内部に作成されます。 1 つの ContentControl は、一度に 1 つのデータベース レコードを表示します。2 つの Button コントロールを使用すると、レコード間をスクロールできます。 コンテンツ コントロールは BindingSource を使用してデータベースに接続します。
コントロールのデータへのバインドの詳細については、「Office ソリューションでのコントロールへのデータのバインド」を参照してください。
文書にインターフェイスを作成するには
ThisAddIn クラスで、次のコントロールを宣言し、AdventureWorksLTDataSet データベースの Customer テーブルを表示して、テーブル内をスクロールするようにします。
Private adventureWorksDataSet As AdventureWorksLTDataSet Private customerTableAdapter As AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter Private customerBindingSource As System.Windows.Forms.BindingSource Private customerContentControl As Microsoft.Office.Tools.Word.RichTextContentControl Private WithEvents button1 As Microsoft.Office.Tools.Word.Controls.Button Private WithEvents button2 As Microsoft.Office.Tools.Word.Controls.Button
private AdventureWorksLTDataSet adventureWorksDataSet; private AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter customerTableAdapter; private System.Windows.Forms.BindingSource customerBindingSource; private Microsoft.Office.Tools.Word.RichTextContentControl customerContentControl; private Microsoft.Office.Tools.Word.Controls.Button button1; private Microsoft.Office.Tools.Word.Controls.Button button2;
ThisAddIn_Startup メソッドに次のコードを追加し、データセットを初期化して、AdventureWorksLTDataSet データベースから得た情報をデータセットに設定します。
Me.adventureWorksDataSet = New AdventureWorksLTDataSet() Me.customerTableAdapter = New AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter() Me.customerTableAdapter.Fill(Me.adventureWorksDataSet.Customer) Me.customerBindingSource = New System.Windows.Forms.BindingSource()
this.adventureWorksDataSet = new AdventureWorksLTDataSet(); this.customerTableAdapter = new AdventureWorksLTDataSetTableAdapters.CustomerTableAdapter(); this.customerTableAdapter.Fill(this.adventureWorksDataSet.Customer); this.customerBindingSource = new System.Windows.Forms.BindingSource();
ThisAddIn_Startup メソッドに次のコードを追加します。 これによりホスト項目が生成され、文書の機能が拡張されます。 詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。
Dim currentDocument As Word.Document = Me.Application.ActiveDocument ' Use the following line of code in projects that target the .NET Framework 4. Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument) ' In projects that target the .NET Framework 3.5, use the following line of code instead. ' Dim extendedDocument As Document = currentDocument.GetVstoObject()
Word.Document currentDocument = this.Application.ActiveDocument; // Use the following line of code in projects that target the .NET Framework 4. Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument); // In projects that target the .NET Framework 3.5, use the following line of code instead. // Document extendedDocument = currentDocument.GetVstoObject();
文書の先頭に範囲を定義します。 これらの範囲により、テキストを挿入してコントロールを配置する場所が特定されます。
extendedDocument.Paragraphs(1).Range.InsertParagraphBefore() extendedDocument.Paragraphs(1).Range.InsertParagraphBefore() extendedDocument.Paragraphs(1).Range.Text = "The companies listed in the AdventureWorksLT database: " extendedDocument.Paragraphs(2).Range.Text = " " Dim range1 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.First Dim range2 As Word.Range = extendedDocument.Paragraphs(2).Range.Characters.Last Dim range3 As Word.Range = extendedDocument.Paragraphs(1).Range.Characters.Last
extendedDocument.Paragraphs[1].Range.InsertParagraphBefore(); extendedDocument.Paragraphs[1].Range.InsertParagraphBefore(); extendedDocument.Paragraphs[1].Range.Text = "The companies listed in the AdventureWorksLT database: \n"; extendedDocument.Paragraphs[2].Range.Text = " "; Word.Range range1 = extendedDocument.Paragraphs[2].Range.Characters.First; Word.Range range2 = extendedDocument.Paragraphs[2].Range.Characters.Last; Word.Range range3 = extendedDocument.Paragraphs[1].Range.Characters.Last;
定義した範囲に、インターフェイス コントロールを追加します。
Me.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1") Me.button1.Text = "Previous" Me.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2") Me.button2.Text = "Next" Me.customerContentControl = extendedDocument.Controls.AddRichTextContentControl(range3, _ "richTextContentControl1")
this.button1 = extendedDocument.Controls.AddButton(range1, 60, 15, "1"); this.button1.Text = "Previous"; this.button2 = extendedDocument.Controls.AddButton(range2, 60, 15, "2"); this.button2.Text = "Next"; this.customerContentControl = extendedDocument.Controls.AddRichTextContentControl( range3, "richTextContentControl1");
BindingSource を使用して、コンテンツ コントロールを AdventureWorksLTDataSet にバインドします。 C# を使用して開発している場合は、Button コントロールの 2 つのイベント ハンドラーを追加します。
Me.customerBindingSource.DataSource = Me.adventureWorksDataSet.Customer Me.customerContentControl.DataBindings.Add("Text", Me.customerBindingSource, _ "CompanyName", True, Me.customerContentControl.DataBindings.DefaultDataSourceUpdateMode)
this.customerBindingSource.DataSource = this.adventureWorksDataSet.Customer; this.customerContentControl.DataBindings.Add("Text", this.customerBindingSource, "CompanyName", true, this.customerContentControl.DataBindings.DefaultDataSourceUpdateMode); this.button1.Click += new EventHandler(button1_Click); this.button2.Click += new EventHandler(button2_Click);
次のコードを追加して、データベース レコード間を移動します。
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles button1.Click Me.customerBindingSource.MovePrevious() End Sub Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles button2.Click Me.customerBindingSource.MoveNext() End Sub
void button1_Click(object sender, EventArgs e) { this.customerBindingSource.MovePrevious(); } void button2_Click(object sender, EventArgs e) { this.customerBindingSource.MoveNext(); }
アドインのテスト
Word を開くと、コンテンツ コントロールにより AdventureWorksLTDataSet データセットのデータが表示されます。 [次へ] ボタンと [前へ] ボタンをクリックして、データベース レコード間をスクロールします。
アドインをテストするには
F5 キーを押します。
customerContentControl という名前のコンテンツ コントロールが作成され、データが設定されます。 同時に、adventureWorksLTDataSet という名前のデータセット オブジェクトと、customerBindingSource という名前の BindingSource がプロジェクトに追加されます。 ContentControl が BindingSource にバインドされ、さらにこれがデータセット オブジェクトにバインドされます。
[次へ] ボタンと [前へ] ボタンをクリックして、データベース レコード間をスクロールします。
参照
処理手順
方法 : ワークシート内でデータベースのレコードをスクロールする
方法 : ホスト コントロールからのデータでデータ ソースを更新する
チュートリアル : ドキュメント レベルのプロジェクトでの単純データ バインディング
チュートリアル : ドキュメント レベルのプロジェクトでの複合データ バインディング
方法 : ホスト コントロールからのデータでデータ ソースを更新する
参照
概念
Office ソリューションでのコントロールへのデータのバインド
Office ソリューションにおけるローカル データベース使用の概要
Visual Studio でのデータへの Windows フォーム コントロールのバインド
Office ソリューションにおけるローカル データベース使用の概要
Windows フォーム アプリケーションでのデータへの接続