チュートリアル : アプリケーション レベルのプロジェクトでの単純データ バインディング
アプリケーション レベルのプロジェクトでは、ホスト コントロールと Windows フォーム コントロールにデータをバインドできます。このチュートリアルでは、実行時に Microsoft Office Word 文書にコントロールを追加し、そのコントロールをデータにバインドする方法を説明します。
対象: このトピックの情報は、Word 2013 と Word 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
このチュートリアルでは、次の作業について説明します。
実行時、文書に ContentControl を追加する。
データセットのインスタンスにコントロールを接続する BindingSource を作成する。
ユーザーがレコード間をスクロールし、コントロールで表示できるようにする。
[!メモ]
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
-
Microsoft Office Developer Tools が含まれているエディションの Visual Studio 2012。詳細については、「[Office ソリューションを開発できるようにコンピューターを構成する](bb398242\(v=vs.110\).md)」を参照してください。
Word 2013 または 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 か .NET Framework 4.5を対象としている場合は、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 Dim extendedDocument As Document = Globals.Factory.GetVstoObject(currentDocument)
Word.Document currentDocument = this.Application.ActiveDocument; Document extendedDocument = Globals.Factory.GetVstoObject(currentDocument);
文書の先頭に範囲を定義します。これらの範囲により、テキストを挿入してコントロールを配置する場所が特定されます。
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 ソリューションにおけるローカル データベース使用の概要
Visual Studio でのデータへの Windows フォーム コントロールのバインド
Office ソリューションにおけるローカル データベース使用の概要
Windows フォーム アプリケーションでのデータへの接続