Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト|サインイン
Visual Studio 2005
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home   MSDN Home
MSDN Home > Visual Studio > 技術情報 > Visual Studio 2005 Tools for Office Word 2003 用実践ラボ

Visual Studio 2005 Tools for Office Word 2003 用実践ラボ

Microsoft Corporation

June 2005
日本語版最終更新日 2005 年 10 月 5 日

適用対象:
    Microsoft Visual Studio 2005
    Microsoft Visual Studio 2005 Tools for the Microsoft Office System
    Microsoft Visual Basic 2005
    Microsoft Office Word 2003

概要:本実践ラボの演習を通じ、Microsoft Visual Studio 2005 Tools for the Microsoft Office System Beta 2 および Microsoft Office Word 2003 を使用した顧客調査アプリケーションの構築を実習します。

注意 この記事はリリース前のドキュメントであり、今後のリリースで変更される可能性があります。Microsoft Visual Studio 2005 Tools for the Microsoft Office System のベータ版は、Microsoft Visual Studio 2005 のベータ版に含まれています。

VSTO2005WordLabs.msi をダウンロードしてください。

目次

実践ラボの準備
演習 1 - Word にアクション ペインを作成する
演習 2 -Word ドキュメントでコントロールを使用する
演習 3 - Word ドキュメントでデータ処理を行う
演習 4 - Word ドキュメントにデータをキャッシュする
まとめ
関連情報

実践ラボの準備

実践ラボの演習を行うには、以下の製品をインストールする必要があります:

  • Microsoft Windows 2000 以降
  • Microsoft Visual Studio 2005 Beta 2
  • Microsoft Visual Studio 2005 Tools for the Microsoft Office System ベータ 2 (Visual Studio 2005 Beta 2 に含まれています)
  • Microsoft Office Professional Edition 2003
  • Microsoft SQL Server 2000 (またはそれ以降) または MSDE と Northwind データベース
メモ 本ラボの説明では、ファイルをできる限りフル パスで表記します。なお、ダウンロード ファイルは「\My Documents\Visual Studio 2005\Projects」に解凍されているものとします。演習に必要なファイル類は 「VSTO2005 Word Labs\Starter Files」というサブフォルダに入っています。本ラボで使用するファイル一式は、「VSTO2005 Word Labs\Completed Labs」サブフォルダにあります。
Word ドキュメントでコントロールを操作する際、コントロールの値を変更できない場合は、デザイン モードで作業を行っていることが考えられます。デザイン モードを終了するには、[Control Toolbox] ツール バーで [Exit Design Mode] をクリックしてください。
また、"Windows Forms controls have been disabled because the document has been scaled. When zoom is returned to 100%, controls will reactivate," というメッセージが表示されたときは、[Control Toolbox] ツール バーで [Design Mode] をクリックしてデザイン モードに移行し、エラーが発生したコントロールのサイズを調整してください。サイズを調整したらデザイン モードを終了します。

演習 1 - Word にアクション ペインを作成する

この演習は、Visual Studio Tools for Office を使用した Word プロジェクトの作成方法および Word でアクション ペインを操作する方法の学習を目的とします。演習 1 では、Word ソリューションにアクション ペインを作成し、作成したアクション ペインに含まれるコントロールのレイアウトを管理します。

所要時間:

  • 実習 1: アクション ペインの作成 - 10 分

実習 1: アクション ペインの作成

Word ドキュメント プロジェクトを作成するには

  1. [File] メニューで [New] をクリックし、続いて [Project] をクリックします。
  2. [Project Types] の一覧で [Visual Basic] を展開し、[Office] をクリックします。
  3. [Templates] の一覧で [Word Document] を選択します。
  4. [Name] ボックスに「CustomerSurvey」と入力し、[Location] ボックスにファイルの場所 (例:「C:\VSTO2005\Labs」) を指定します。このときの [New Project] ダイアログ ボックスは、図 1 のようになります。

    Word ドキュメント プロジェクトの作成

    図 1. Word ドキュメント プロジェクトの作成 (画像をクリックすると拡大表示できます。)

  5. [OK] をクリックします。Visual Studio Tools for Office Project Wizard が起動します。
  6. ウィザードで、[Copy an existing document] を選択します。
  7. [Browse] をクリックします。
  8. 以下のディレクトリに移動し、[Open] をクリックします。

    「\My Documents\Visual Studio 2005\Projects\VSTO2005 Word Labs\Starter Files\Customer Satisfaction Survey.doc」

  9. ウィザードで、[OK] をクリックします。このとき、図 2 のような警告メッセージが表示されることがあります。

    Visual Basic for Applications プロジェクト システムへのアクセスはデフォルトでは無効になっています。

    図 2. Visual Basic for Applications プロジェクト システムへのアクセスはデフォルトでは無効になっています。(クリックすると拡大表示できます。)

    上記のメッセージが表示された場合は、[OK] をクリックして Visual Basic for Applications プロジェクト システムへのアクセスを許可してください。この設定は一度行えば以後必要ありません。

  10. [File] メニューで [Save All] をクリックします。

Word のアクション ペインにコントロールを追加するには

  1. [Solution Explorer] で、CustomerSurvey プロジェクトを右クリックします。ショートカット メニューで [Add] をポイントしたら、[Existing Item] をクリックします。[Add Existing Item] ダイアログ ボックスが表示されます。
  2. 以下のディレクトリに移動し、[Add] をクリックします:

    「\My Documents\Visual Studio 2005\Projects\VSTO2005 Word Labs\Starter Files\SubmitPane.vb」

  3. [Solution Explorer] で、[SubmitPane.vb] を右クリックします。ショートカット メニューで [View Designer] をクリックします。

    図 3 で示すユーザー コントロール SubmitPane が表示されます。SubmitPane は、GroupBoxLabelButton それぞれを 1 つずつ持つシンプルなユーザー コントロールです。

    アクション ペインに追加する準備ができた SubmitPane

    図 3. アクション ペインに追加する準備ができた SubmitPane

  4. [Solution Explorer] で、[SubmitPane.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  5. SubmitPane クラスに、Button がクリックされたときに OnSubmit という名前のイベントを発生させるコードと、LabelButton コントロールのテキストを設定する WriteOnly 型のパブリック プロパティをエクスポーズするコードを追加します。はじめに、Event ステートメントを SubmitPane クラスに追加します。
    Public Class SubmitPane
    
        Public Event OnSubmit()
    
    End Class
    
  6. MessageButtonText プロパティを定義するコードを追加します。
        Public WriteOnly Property Message() As String
            Set(ByVal value As String)
                Me.lblStatus.Text = value
            End Set
        End Property
    
        Public WriteOnly Property ButtonText() As String
            Set(ByVal value As String)
                Me.btnSubmit.Text = value
            End Set
        End Property
    
  7. [Code] ウインドウ上部にある [Class Name] の一覧で、[btnSubmit] を選択します。
  8. [Code] ウインドウ上部にある [Method Name] の一覧で、[Click] を選択します。Visual Studio により、ボタンの Click イベントにプロシージャ スタブが生成されます。
  9. OnSubmit イベントを発生させるコードを追加します。
        Private Sub btnSubmit_Click(ByVal sender As Object, _
          ByVal e As System.EventArgs) Handles btnSubmit.Click
            RaiseEvent OnSubmit()
        End Sub
    
  10. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。ドキュメントのコード モジュールが表示されます。ドキュメントのコードビハインド部分が、「ThisDocument」という名前のクラスにカプセル化されていることに注目してください。
  11. SubmitPane ユーザー コントロールのインスタンスを生成するために、ThisDocument クラスにプライベート メンバ変数を追加します。
    Private WithEvents ucSubmitPane As SubmitPane
    
  12. SubmitPane コントロールを Word アクション ペインに追加する CreateActionsPane という名前の新しいプライベート メソッドを ThisDocument クラスに追加します。
    Private Sub CreateActionsPane()
        Me.SmartDocument.SolutionID = ""
    
        'Add a user control to the actions pane.
        ucSubmitPane = New SubmitPane
        Me.ActionsPane.Controls.Add(ucSubmitPane)
    
    End Sub
    
  13. ThisDocument クラスの Startup イベントに CreateActionsPane への呼び出しを追加します。
    Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) 
    Handles Me.Startup
        Me.CreateActionsPane()
    End Sub
    
  14. ボタンがクリックされたときに SubmitPane コントロールで発生する OnSubmit イベントを処理するコードを追加します。プロシージャ スタブを自動的に追加するため、[Class Name] の一覧から [ucSubmitPane] を選択し、[Method Name] の一覧から [OnSubmit] を選択します。
  15. プロシージャ スタブに以下のコードを追加します。
    Private Sub ucSubmitPane_OnSubmit() Handles ucSubmitPane.OnSubmit
        MessageBox.Show("TO DO. Submit")
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. 図 4 で示すように、アクション ペインに SubmitPane ユーザー コントロールが表示されます。

    SubmitPane ユーザー コントロールを表示したアクション ペイン (クリックすると拡大表示できます。)

    図 4. SubmitPane ユーザー コントロールを表示したアクション ペイン (クリックすると拡大表示できます。)

  4. [Submit] をクリックします。TO DO: Submit というメッセージが表示されます。
  5. 変更を保存せずにドキュメントを閉じて、Word を終了します。

演習 2 - Word ドキュメントでコントロールを使用する

この演習は、Word ドキュメントで使用可能なコントロールの種類の紹介と、ドキュメント イベントとコントロール イベントの処理方法についての学習を目的とします。

所要時間:

  • 実習 1: Bookmark コントロールの使用とイベント処理 - 15 分
  • 実習 2: Windows Forms コントロールの使用 - 15 分

この演習では、演習 1 で作成した CustomerSurvey プロジェクトを使用します。

実習 1: Bookmark コントロールの使用とイベント処理

ドキュメント中のブックマーク コントロールのイベントを処理するには

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Designer] をクリックします。
  2. [Properties] ウインドウが表示されないときは、[View] メニューで [Properties Window] をクリックします。
  3. [Properties] ウインドウ上部にあるリスト ([Control] の一覧) 横にある矢印をクリックし、ドキュメントに埋め込まれているコントロールを一覧表示します。このとき、ブックマーク コントロールがすでにいくつか存在していることに注目してください。これらは、プロジェクトを作成したときにオリジナルの Customer Satisfaction Survey.doc に存在していたブックマークのブックマーク コントロールで、デザイナが自動的に生成したものです。
  4. [Properties] ウインドウの [Control] の一覧で、[bkMenu] を選択して bkMenu ブックマークを選択します。これにより、ドキュメントの右上角にある Menu ブックマークが選択されます。
  5. bkMenu ブックマーク内でダブルクリックします。ThisDocument.vb の [Code] ウインドウがオープンします。このとき、自動的に bkMenu_SelectionChange イベントが生成されます。
  6. ブックマークが選択されたときに Word のステータス バーのテキストを変更する次のコードを bkMenu_SelectionChange に追加します。
    Private Sub bkMenu_SelectionChange(ByVal sender As System.Object, _
      ByVal e As Microsoft.Office.Tools.Word.SelectionEventArgs) _
      Handles bkMenu.SelectionChange
        Me.Application.StatusBar = "Right-click for more options"
    End Sub
    

ドキュメントの初期化中にコマンド バーを生成するには

  1. CommandBar および CommandBarButton を参照するためのプライベート メンバ変数を ThisDocument クラスに追加します。
    'CommandBar popup and CommandBar controls
    Private cbPopup As Office.CommandBar
    Private cbctlPrevious As Office.CommandBarButton
    Private cbctlNext As Office.CommandBarButton
    Private cbctlShowByCustID As Office.CommandBarButton
    Private cbctlShowAll As Office.CommandBarButton
    Private cbctlShowCompleted As Office.CommandBarButton
    
  2. カスタム ポップアップ上のコマンド バー ボタンのいずれか 1 つがクリックされたときに呼び出される、cbctlClick という名前のプライベート メソッドを ThisDocument クラスに追加します。
    Private Sub cbctlClick(ByVal Ctrl As Office.CommandBarButton, _
      ByRef CancelDefault As Boolean)
        MessageBox.Show("To do: " & Ctrl.Tag)
    End Sub
    
  3. コマンド バー ボタンの生成とボタンのイベント デリゲートを設定する目的で呼び出される、AddPopupButton という名前のプライベート メソッドを ThisDocument クラスに追加します。
    Private Sub AddPopupButton(ByVal Caption As String, _
      ByVal Tag As String, ByRef Btn As Office.CommandBarButton)
    
        'Caption および Tag プロパティに設定された値をもとにボタンを追加します。
        Btn = cbPopup.Controls.Add(Office.MsoControlType.msoControlButton)
        Btn.Caption = Caption
        Btn.Tag = Tag
    
        'ボタンがクリックされたときのイベント ハンドラをボタンに設定します。
        AddHandler Btn.Click, AddressOf Me.cbctlClick
    
    End Sub
    
  4. Survey Filter Popup という名前のポップアップ コマンド バーを生成する、AddPopupMenu という名前のプライベート メソッドを ThisDocument クラスに追加します。
    Private Sub AddPopupMenu()
        Try
            'コマンド バーの変更が Normal.dot (規定テンプレート) に保存されるの
            'ではなくこのドキュメントに反映されるよう、カスタマイゼーション 
            'コンテキストをドキュメントに設定します。
            Me.Application.CustomizationContext = _
                Me.Application.ActiveDocument
    
            'ドキュメントにコマンド バーを追加します。
            cbPopup = Me.CommandBars.Add("Survey Filter Popup", _
                Office.MsoBarPosition.msoBarPopup, , True)
    
            'コマンド ボタンをポップアップに追加します。
            Me.AddPopupButton("Previous Order", "MOVE_PREVIOUS", _
                cbctlPrevious)
            Me.AddPopupButton("Next Order", "MOVE_NEXT", cbctlNext)
            Me.AddPopupButton("", "SHOW_BY_CUSTID", cbctlShowByCustID)
            cbctlShowByCustID.BeginGroup = True
            Me.AddPopupButton("Show Only Completed Surveys Ready to Submit", _
                "SHOW_COMPLETED", cbctlShowCompleted)
            Me.AddPopupButton("Show All Orders", "SHOW_ALL", cbctlShowAll)
    
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error adding Survey Filter Popup")
        End Try
    End Sub
    
  5. ThisDocument_Startup に、AddPopupMenu メソッドを呼び出す次の 1 行を追加します。
    Me.AddPopupMenu()
    

ブックマークの右クリック時にコマンド バー ポップアップを表示するには

  1. [Code] ウインドウの [Class Name] の一覧で、[bkMenu] を選択します。[Method Name] の一覧で [BeforeRightClick] をクリックします。[Code] ウインドウに、対応するイベント ハンドラ、bkMenu_BeforeRightClick が表示されることに注目してください。
  2. bkMenu ブックマークを右クリックしたときに [Survey Filter Popup] コマンド バーを表示するコードを、bkMenu_BeforeRightClick に追加します。
    Private Sub bkMenu_BeforeRightClick(ByVal sender As Object, _
      ByVal e As Microsoft.Office.Tools.Word.ClickEventArgs) _
      Handles bkMenu.BeforeRightClick
    
        '現在の Customer ID のテキストを元にコマンド ボタン プロパティの情報を更新します。
        cbctlShowByCustID.Caption = "Show Only Orders for [TO DO]"
    
        'ポップアップを表示し、デフォルトのアクションを取り消します。
        cbPopup.ShowPopup()
        e.Cancel = True
    
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. ドキュメントをクリックしてブックマーク bkMenu 内に挿入マークを配置します。このとき、図 5 で示すように、ステータス バーのテキストが "Right-click for more options,;" に変わることに注目してください。

    ブックマークをクリックすると "right-click to see the pop-up menu" というステータス メッセージが表示されます。(クリックすると拡大表示できます。)

    図 5. ブックマークをクリックすると "right-click to see the pop-up menu" というステータス メッセージが表示されます。(画像をクリックすると拡大表示できます。)

  4. ブックマーク bkMenu を右クリックして [Survey Filter Popup] コマンド バーを表示します。
  5. ポップアップ メニュー上のコントロールのいずれか 1 つをクリックしてメッセージを表示させます。
  6. 変更を保存せずにドキュメントを閉じて、Word を終了します。

実習 2: Windows Forms コントロールの使用

Windows Forms コントロールをドキュメントに追加するには

コントロールをドキュメントに配置する具体例については、本実習を通じて図 6 を参照してください。

コントロールがすべて配置されるとドキュメントは上記のようになります。(クリックすると拡大表示できます。)

図 6. コントロールがすべて配置されるとドキュメントは上記のようになります。(クリックすると拡大表示できます。)

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Designer] をクリックします。
  2. [Toolbox] ウインドウが表示されないときは、[View] メニューで [Toolbox] をクリックします。
  3. [NumericUpDown] コントロールを選択し、顧客調査表の 1 段目最後のセルにドロップします。
  4. [CheckBox] コントロールを選択し、顧客調査表の 2 段目最後のセルにドロップします。
  5. [CheckBox] コントロールを選択し、顧客調査表の 3 段目最後のセルにドロップします。
  6. [NumericUpDown] コントロールを選択し、顧客調査表の 4 段目最後のセルにドロップします。
  7. [CheckBox] コントロールを選択し、顧客調査票の 5 段目最後のセルにドロップします。
  8. 表 1 に従って、ドキュメント上の Windows Forms コントロールのプロパティ値を設定します。

    表 1. Customer Satisfaction Survey.doc 内コントロールのプロパティ値

    コントロール プロパティ
    NumericUpDown1 (Name) nupdnSalesRep
      Maximum 5
      Minimum 1
      Value 5
      Width 140
    CheckBox1 (Name) chkCourteous
      Text No
      Width 140
    CheckBox2 (Name) chkEfficiency
      Text No
      Width 140
    NumericUpDown2 (Name) nupdnOverall
      Maximum 5
      Minimum 1
      Value 5
      Width 140
    CheckBox3 (Name) chkSurveyed
      Text Completed
      Width 140

ドキュメント上の Windows Forms コントロールを初期化するには

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  2. ドキュメントの標準フォントに近い Font を返す、NormalFont という読み取り専用のプライベート プロパティを ThisDocument クラスに追加します。NormalFont を使用して Windows Forms コントロールの Font プロパティを設定すると、ドキュメントの標準スタイル フォントに近いフォントが使われるようになります。
    Private ReadOnly Property NormalFont() As System.Drawing.Font
         Get
             Dim ftNormal As Word.Font = Me.Styles("Normal").Font
             Dim ft As System.Drawing.Font
             ft = New Font(ftNormal.Name, ftNormal.Size, FontStyle.Regular)
             Return ft
         End Get
    End Property
    
  3. コントロールのフォントを初期化する次のコードを ThisDocument_Startup に追加します。
    'コントロールのフォントを標準スタイルと一致するようフォーマットします。
    Dim ft As System.Drawing.Font = Me.NormalFont
    Me.nupdnSalesRep.Font = ft
    Me.chkCourteous.Font = ft
    Me.chkEfficiency.Font = ft
    Me.nupdnOverall.Font = ft
    Me.chkSurveyed.Font = ft
    
  4. [Code] ウインドウの [Class Name] の一覧で [chkCourteous] を選択し、[Method Name] の一覧で [CheckedChanged] を選択します。
  5. コントロールのテキストを現在の値に応じて "Yes" または "No" に変更するコードを、 chkCourteous_CheckedChanged イベント ハンドラに追加します。
    Private Sub chkCourteous_CheckedChanged(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles chkCourteous.CheckedChanged
        If chkCourteous.Checked Then
            chkCourteous.Text = "Yes"
        Else
            chkCourteous.Text = "No"
        End If
    End Sub
    
  6. 同様のテクニックで、[chkEfficiency] チェック ボックス コントロールの CheckChanged イベントにも同様のイベント ハンドラを作成します。
    Private Sub chkEfficiency_CheckedChanged(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles chkEfficiency.CheckedChanged
        If chkEfficiency.Checked Then
            chkEfficiency.Text = "Yes"
        Else
            chkEfficiency.Text = "No"
        End If
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. ドキュメント上の Windows Forms コントロールは、図 7 で示すようになります。

    Windows Forms コントロールが埋め込まれた Word ドキュメント (クリックすると拡大表示できます。)

    Figure?7. Windows Forms コントロールが埋め込まれた Word ドキュメント (クリックすると拡大表示できます。)

  4. チェックボックスのどれか 1 つをオンにし、チェック ボックスの状態に合わせてテキストの表示が変化することを確認してください。
  5. NumericUpDown コントロールのどれか 1 つで値を変更します。
  6. 変更を保存せずにドキュメントを閉じて、Word を終了します。

演習 3 - Word ドキュメントでデータ処理を行う

この演習は、Word ドキュメントでデータ処理を行う方法の学習を目的とします。演習では、SQL Server データ ソースへの接続、ブックマークおよび Windows Forms コントロールのデータベース オブジェクトへの連結、データソース内のレコードへのナビゲートを行います。

所要時間:

  • 実習 1: 接続の設定とデータ ソースの追加 - 10 分
  • 実習 2: データへの接続、連結、ナビゲート - 30 分
  • 実習 3: データのフィルタ処理 - 10 分
  • 実習 4: データの挿入と更新 - 10 分

この演習では、演習 2 で作成した CustomerSurvey プロジェクトを使用します。

実習 1: 接続の設定とデータ ソースの追加

この演習では、SQL Server 2000 に付属のサンプル データソース Northwind のデータを使用します。

SQL バッチ プロシージャの実行により、Northwind サンプル データベースに Surveys というテーブルを新規に作成し、この Surveys テーブルに、Orders テーブルの最初のレコード 100 件に対応する OrderID 値と CustomerID 値を持つレコード 100 件を新規に作成します。Surveys テーブルの仕様は以下の通りです。

表 2. Surveys テーブル仕様

フィールド SQL データ型 説明
OrderID Int Orders テーブル内の OrderID に対応している OrderID です。
CustomerID Nchar(5) Orders テーブル内のオーダー案件に対応している CustomerID です。
RateSalesRep smallint 販売員に対する満足度 (0 から 5)。
RateCourteous Bit 礼儀正しさに対する評価 (0 (no) または 1 (yes))。
RateEfficiency Bit 効率に対する評価 0 ((no) または 1 (yes))。
RateOverall smallint サービス全体に対する満足度 (0 から 5)。
RateFrequency smallint サービス頻度に関する評価 (0 から 5)。
Survey Bit 調査が終了している場合は 1: それ以外は 0。

SQL バッチ プロシージャを実行するには

  1. タスク バーで、[Start] をクリックし、続いて [Run] をクリックします。「cmd」と入力して [OK] をクリックします。コマンド ウインドウが開きます。
  2. 演習ファイルが入っている以下のフォルダに移動します。

    「\My Documents\Visual Studio 2005\Projects\VSTO2005 Word Labs\Starter Files」

  3. バッチ プロシージャを実行します。
    osql.exe ?n -E -i survey.sql
    

    "100 row(s) affected" というメッセージが表示されます。

  4. コマンド ウインドウをクローズします。

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

  1. Visual Studio の [Data] メニューで、[Show Data Sources] をクリックします。[Data Sources] ウインドウが表示されます。
  2. [Data Sources] ウインドウで、[Add New Data Source] をクリックします。Data Source Configuration Wizard が起動します。
  3. データ ソース タイプに [Database] を選択して、[Next] をクリックします。
  4. [New Connection] をクリックします。このとき、すでに作成されたデータ接続があると、図 9 のような [Add Connection] ダイアログが表示されるので、次の手順は飛ばしてください。データ接続の作成が初めての場合は、[Choose Data Source] が表示されます。
    • [Choose Data Source] ダイアログ ボックスで、図 8 に示すように、[Microsoft SQL Server] を選択します。

      [Choose Data Source] ダイアログ ボックス

      図 8. [Choose Data Source] ダイアログ ボックス

    • [Continue] をクリックします。図 9 のような [Add Connection] ダイアログ ボックスが表示されます。

      [Add Connection] ダイアログ ボックス (クリックすると拡大表示できます。)

      図 9. [Add Connection] ダイアログ ボックス (クリックすると拡大表示できます。)

  5. [Server name] の一覧に「(local)」と入力するか、一覧から任意のサーバー名を選択します。この設定を行うと、[Connect to a database] セクションが使用できる状態になります。
  6. [Log on to the server] セクションで、[Use Windows Authentication] オプションを選択します。
  7. [Select or enter a database name] の一覧から、[Northwind] を選択します。
  8. [Test Connection] をクリックします。図 10 のような確認メッセージが表示されないときは、[Add Connection] ダイアログ ボックスに戻って、設定が適切かどうかを確認してください。

    設定が適切であると、接続テストは成功します。

    図 10. 設定が適切であると、接続テストは成功します。

  9. [OK] をクリックしてメッセージ ボックスをクローズし、さらに [OK] をクリックして [Add Connection] ダイアログ ボックスもクローズします。Data Source Configuration Wizard に、図 11 に示すように、先ほど作成した接続が取り込まれます。

    サーバー名がデータベース名の前に表示されている  (クリックすると拡大表示できます。)

    図 11. サーバー名がデータベース名の前に表示されている (クリックすると拡大表示できます。)

  10. [Next] をクリックします。図 12 に示すような、ウィザードの次のステップに進みます。

    接続を保存します (クリックすると拡大表示できます。)

    図 12. 接続を保存します (クリックすると拡大表示できます。)

  11. [Yes, save the connection as] チェック ボックスをオンにした状態で、[Next] をクリックします。図 13 に示すような [Choose your database objects] ウィザード ページが表示されます。

    このページで、アプリケーションに必要なオブジェクトを選択します (クリックすると拡大表示できます。)

    図 13. このページで、アプリケーションに必要なオブジェクトを選択します (クリックすると拡大表示できます。)

  12. データベース オブジェクトの一覧で [Tables] を展開します。
  13. [Customers][Surveys] テーブルを選択します。
  14. [Finish] をクリックします。

データ ソースを設定するには

  1. [Data Sources] ウインドウで [NorthwindDataSet] を選択し、[Data Sources] ウインドウ上部にある [Edit DataSet with Designer] ボタンをクリックします。
  2. デザイナ ウインドウで [Surveys] テーブルを右クリックし、ショートカット メニューで [Configure] をクリックします。TableAdapter Configuration Wizard が起動します。
  3. 新たに入力された DataSets には [Surveyed] フィールドが 0 のレコードのみが含まれるようにする、WHERE 節を SQL 構文に追加します。
    SELECT OrderID, CustomerID, RateSalesRep, RateCourteous, RateEfficiency, RateOverall, Surveyed 
    FROM dbo.Surveys
    WHERE Surveyed=0
    

    設定が終了すると、ダイアログ ボックスは 図 14 のようになります。

    SQL 構文に WHERE 節を追加します (クリックすると拡大表示できます。)

    図 14. SQL 構文に WHERE 節を追加します (クリックすると拡大表示できます。)

  4. [Finish] をクリックします。

リレーションをデータ ソースに追加するには

  1. [Data] メニューで [Add] をポイントし、続いて [Relation] をクリックします。[Relation] ダイアログ ボックスが表示されます。
  2. 新規リレーションを次のように設定します。
    • [Name]: FK_Survey_Customers
    • [Parent Table]: Surveys
    • [Child Table]: Customers
    • [Key Column]: CustomerID
    • [Foreign Key Column]: CustomerID

    設定が完了すると、[Relation] ダイアログ ボックスは図 15 のようになります。

    [Relation] ダイアログ ボックス (クリックすると拡大表示できます。)

    図 15. [Relation] ダイアログ ボックス (クリックすると拡大表示できます。)

  3. [OK] をクリックして新規リレーションを追加します。
  4. 図 16 に示すような [NorthwindDataSet] デザイナ ウインドウが表示されます。

    新規リレーションのデザイン ビュー

    図 16. 新規リレーションのデザイン ビュー

  5. [File] メニューで [Save All] をクリックし、変更を保存します。

実習 2: データへの接続、連結、ナビゲート

ブックマークを Surveys テーブル (親テーブル) 内のフィールドに連結するには

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Designer] をクリックします。
  2. [Data Sources] ウインドウで [Surveys] を展開します。

    [Surveys] 配下にある [OrderID] を選択し、ドキュメント内の bkOrderID ブックマークの上にドラッグします。

    メモ これで、bkOrderID ブックマークは SurveysBindingSource オブジェクトに連結されました。[OrderID] フィールドをブックマックの上にドロップしたときに、SurveysBindingSource オブジェクトがデザイナにより自動的にコンポーネント トレイに追加されます。

ドキュメント上の Windows Forms コントロールを SurveysBindingSource 内のフィールドに連結するには

  1. ドキュメントの [nupdnSalesRep] コントロールを選択します。
  2. [Properties] ウインドウで [DataBindings] プロパティを展開し、[(Advanced)] プロパティを選択します。
  3. [(Advanced)] プロパティの隣にある (...) をクリックします。[Formatting and Advanced Binding] ダイアログ ボックスが表示されます (図 17 参照)。

    [Formatting and Advanced Binding] ダイアログ ボックス (クリックすると拡大表示できます。)

    図 17. [Formatting and Advanced Binding] ダイアログ ボックス (クリックすると拡大表示できます。)

  4. [Property] の一覧で [Value] を選択します。
  5. [Binding] ボックスの一覧をドロップ ダウンします。
  6. [SurveysBindingSource] を展開して [RateSalesRep] を選択します。
  7. [OK] をクリックします。
  8. ドキュメント内の各コントロールに対し、手順 1 から 7 を実行します。各コントロールの連結先フィールドについては、表 3 を参照してください。

    表 3. コントロール別連結先

    コントロール 連結するプロパティ 連結先フィールド
    nupdnSalesRep Value SurveysBindingSource - RateSalesRep
    chkCourteous Checked SurveysBindingSource - RateCourteous
    chkEfficiency Checked SurveysBindingSource - RateEfficiency
    nupdnOverall Value SurveysBindingSource - RateOverall
    chkSurveyed Checked SurveysBindingSource - Surveyed

外部キーを使用してコントロールを Customers テーブル (子テーブル) 内のフィールドに連結するには

  1. [Data Sources] ウインドウで [Customers] を展開します。
  2. [Customers] 配下にある [CustomerID] を選択し、ドキュメント内の bkCustomerID ブックマークの上にドラッグします。
    メモ これで、bkCustomerID ブックマークは CustomersBindingSource オブジェクトに連結されました。[CustomerID] フィールドを [Data Sources] ウインドウからドロップしたときに、CustomersBindingSource オブジェクトがデザイナにより自動的にコンポーネント トレイに追加されます。
  3. [Customers] 配下にある [CompanyName] を選択し、ドキュメント内の [bkCompanyName] ブックマークの上にドラッグします。
  4. [Customers] 配下にある [ContactName] を選択し、ドキュメント内の [bkContactName] ブックマークの上にドラッグします。
  5. [Customers] 配下にある [Phone] を選択し、ドキュメント内の [bkPhone] ブックマークの上にドラッグします。
  6. コンポーネント トレイで [CustomersBindingSource] を選択します。
  7. [Properties] ウインドウで、DataSource プロパティに SurveysBindingSource を設定します。
  8. DataMember プロパティに FK_Survey_Customers を設定します。
  9. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  10. GetSurveys という新規プライベート メソッドを ThisDocument クラスに追加します。
    Private Sub GetSurveys()
         Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
         Me.SurveysTableAdapter.Fill(Me.NorthwindDataSet.Surveys)
    End Sub
    
  11. デザイナが ThisDocument_Startup に追加した、テーブル アダプタを自動的に入力するコードを削除します。
    'TODO: 以下の行を削除して 'NorthwindDataSet.Customers'のデフォルト AutoFill を削除します。 
    If Me.NeedsFill("NorthwindDataSet") Then
        Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
    End If
    'TODO: 以下の行を削除して 'NorthwindDataSet.Surveys' のデフォルト AutoFill を削除します。
    If Me.NeedsFill("NorthwindDataSet") Then
         Me.SurveysTableAdapter.Fill(Me.NorthwindDataSet.Surveys)
    End If
    
  12. ThisDocument_StartupGetSurveys への呼び出しを追加します。
    Private Sub ThisDocument_Startup(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles Me.Startup
        Me.CreateActionsPane()
        Me.AddPopupMenu()
        'コントロールのフォントを標準スタイルと一致するようフォーマットします。
        Dim ft As System.Drawing.Font = Me.NormalFont
        Me.nupdnSalesRep.Font = ft
        Me.chkCourteous.Font = ft
        Me.chkEfficiency.Font = ft
        Me.nupdnOverall.Font = ft
        Me.chkSurveyed.Font = ft
    
        Me.GetSurveys()
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. データ ソースの 1 件目のレコード (Order 10248 for VINET) の値 が、図 18 に示すように、ブックマーク コントロールと Windows Forms コントロール上に表示されることに注目してください。

    データ連結コントロールが埋め込まれたドキュメント (クリックすると拡大表示できます。)

    図 18. データ連結コントロールが埋め込まれたドキュメント (クリックすると拡大表示できます。)

  4. 変更を保存せずにドキュメントを閉じて、Word を終了します。

ビューのレコードをナビゲートするには

  1. cbctlClick 内のコードを、イベントを発生させたコマンド ボタン バーに応じて MovePrevious または MoveNext のいずれかを DataConnector 上で実行する次のコードで置き換えます。
    Private Sub cbctlClick(ByVal Ctrl As Office.CommandBarButton, _
        ByRef CancelDefault As Boolean)
    
        Me.Application.ScreenUpdating = False
    
        Try
            'クリックされたボタンのタグに応じたアクションを実行します。 
            Select Case Ctrl.Tag
                Case "MOVE_PREVIOUS"
                    Me.SurveysBindingSource.MovePrevious()
                Case "MOVE_NEXT"
                    Me.SurveysBindingSource.MoveNext()
            End Select
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            Me.Application.ScreenUpdating = True
        End Try
    
    End Sub
    
  2. ビュー内の現在の位置に応じて、ナビゲーション コマンド バー ボタンを有効または無効にするよう、bkMenu_BeforeRightClick を修正します。
    Private Sub bkMenu_BeforeRightClick(ByVal sender As Object, _
        ByVal e As Microsoft.Office.Tools.Word.ClickEventArgs) _
        Handles bkMenu.BeforeRightClick
    
        '現在の Customer ID のテキスト、およびデータ ソース内の現在の位置を元に、コマンドバー ボタン プロパティを更新します。
        cbctlShowByCustID.Caption = _
            "Show Only Orders for " & Me.bkCustomerID.Text
        If Me.bkCustomerID.Text = "" Then
            cbctlShowByCustID.Enabled = False
        Else
            cbctlShowByCustID.Enabled = True
        End If
        Dim nPos As Integer = Me.SurveysBindingSource.Position
        cbctlPrevious.Enabled = (nPos > 0)
        cbctlNext.Enabled = ( _
            nPos + 1 < Me.SurveysBindingSource.Count)
    
        'ポップアップを表示し、デフォルトのアクションを取り消します。
        cbPopup.ShowPopup()
        e.Cancel = True
    
    End Sub
    

ビュー内の現在の位置とレコード数を表示するには

  1. アクション ペイン内の SubmitPane コントロールのラベルを更新し、ドキュメント内の現在の位置とレコード数を表示する、UpdatePane という名前のプライベート メソッドを ThisDocument クラスに追加します。
    Private Sub UpdatePane()
    
        'SubmitPane コントロールを更新し、データ ソース内の現在の位置とデータ ソース内のレコード数を表示します。
        If Not (Me.ucSubmitPane Is Nothing) Then
            Dim sCaption As String
            Dim nCurrentRecord As Integer = Me.SurveysBindingSource.Position + 1
            Dim nRecords As Integer = Me.SurveysBindingSource.Count
            sCaption = nCurrentRecord & " of " & nRecords
            Me.ucSubmitPane.Message = sCaption
        End If
    
    End Sub
    
  2. [Class Name] の一覧で [SurveysBindingSource] を選択し、[Method Name] の一覧で [ListChanged] を選択します。
  3. リストに変更があったときにウインドウ キャプションを更新するコードを SurveysBindingSource_ListChanged に追加します。
    Private Sub SurveysBindingSource_ListChanged(ByVal sender As Object, _
      ByVal e As System.ComponentModel.ListChangedEventArgs) _
      Handles SurveysBindingSource.ListChanged
        Me.UpdatePane()
    End Sub
    
  4. [Method Name] の一覧で [PositionChanged] を選択します。
  5. 既存のリスト内の位置に変更があったときにウインドウ キャプションを更新するコードを SurveysBindingSource_PositionChanged に追加します。
    Private Sub SurveysBindingSource_PositionChanged(ByVal sender As Object, _
      ByVal e As System.EventArgs) _
      Handles SurveysBindingSource.PositionChanged
        Me.UpdatePane()
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。アクション ペインにデータ ソース内の現在の位置 (100 個中 1 個目) が表示されている点、ビュー内の 1 件目の注文が [Order 10248] となっている点に注目してください。
  3. 調査票でコントロールにデータを入力します。
    メモ 次の手順を実行中、再描画がうまく行われない場合があります (Visual Studio 2005 Beta 2 をお使いの場合のみ)。テーブル中のコントロールが重ねて表示されたり、二重に表示される場合は、ページを上下に移動するなどしてウインドウを強制的に再描画させることで再描画の問題は解決します。
  4. ブックマーク [bkMenu] を右クリックし、ポップアップ メニューで [Next Order] をクリックしてデータ ソース内の次のレコードに移動します。データ ソース内の現在の位置 (100 個中 2 個目) を反映して、アクション ペインの内容が変更され、ビューには [Order 10249] が表示されていることに注目してください。
  5. ブックマーク [bkMenu] を右クリックし、ポップアップ メニューで [Previous Order] をクリックしてデータ ソース内の 1 件目のレコードに戻ります。
  6. 入力内容 (実際のデータ ソースではなく、インメモリ データセットに格納されている内容) が、Order 10248 のビューに復元されます。
  7. 変更を保存せずにドキュメントを閉じてし、Word を終了します。

実習 3: データのフィルタ処理

データ ソース内のデータに対してフィルタ処理を行うには

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  2. すべてのデータを表示する、指定のカスタマのデータのみを表示する、調査が終了したデータのみを表示するという、3 つのフィルタリング条件を、cbctlClickSelect Case 構文に追加します。
    Private Sub cbctlClick(ByVal Ctrl As Office.CommandBarButton, _
        ByRef CancelDefault As Boolean)
    
        Me.Application.ScreenUpdating = False
    
        Try
            'クリックされたボタンのタグに応じたアクションを実行します。
            Select Case Ctrl.Tag
                Case "MOVE_PREVIOUS"
                    Me.SurveysBindingSource.MovePrevious()
                Case "MOVE_NEXT"
                    Me.SurveysBindingSource.MoveNext()
                Case "SHOW_ALL"
                    Me.SurveysBindingSource.EndEdit()
                    Me.SurveysBindingSource.RemoveFilter()
                Case "SHOW_BY_CUSTID"
                    Me.SurveysBindingSource.EndEdit()
                    Me.SurveysBindingSource.Filter = _
                        String.Format(" CustomerID = '{0}' ", _
                        Me.bkCustomerID.Text)
                Case "SHOW_COMPLETED"
                    Me.SurveysBindingSource.EndEdit()
                    Me.SurveysBindingSource.Filter = "Surveyed=1"
            End Select
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            Me.Application.ScreenUpdating = True
        End Try
    
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. アクション ペインの変化を観察します: 現在、ビューには、テーブル内のレコードが 100 件が存在し、レコード 1 が表示されています。
  4. [bkMenu] ブックマークを右クリックします。ショートカット メニューで [Show Only Orders for VINET] をクリックします。
  5. アクション ペインのメッセージを確認します。現在ビューは、Customer ID VINET に関連付けされた Surveys テーブル内のレコード 3 件のみを表していることが示されています。
  6. [bkMenu] ブックマークを右クリックし、[Previous Order] または [Next Order] をクリックして、VINET のレコードにナビゲートします。
  7. [bkMenu] ブックマークを右クリックし、[Show All Orders] をクリックしてすべてのレコードを表示させます。
  8. 1 つまたは複数のレコードで、入力を完了させます。調査が終了したレコードについては、[Completed] にチェックを付けます。
  9. [bkMenu] ブックマークを右クリックし、[Show Only Completed Surveys Ready to Submit] をクリックして調査の終了チェックを付けた調査データのみを表示させます。
  10. 変更を保存せずにドキュメントを閉じて、Word を終了します。

実習 4: データの挿入と更新

データを更新するには

  1. [Solution Explorer] で、[ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  2. データベース内の調査データを更新できるよう、ボタンがクリックされたときに SubmitPane コントロールにより発生する OnSubmit イベント内のコードを差し替えます。
    Private Sub ucSubmitPane_OnSubmit() Handles ucSubmitPane.OnSubmit
    
        '現在の編集を終了します。
        Me.SurveysBindingSource.EndEdit()
    
        'Surveyed フィールドに 1 が設定されている行を選択します。
        Dim rows() As CustomerSurvey.NorthwindDataSet.SurveysRow
        rows = Me.northwindDataSet.Surveys.Select("Surveyed=1")
    
        '選択された行が 1 つでもあれば、データベースの更新に
        '進みます。それ以外は、メッセージを表示します。
        If rows.Length > 0 Then
            Try
                Dim nCount As Integer
    
                '更新処理を実行し、更新対象の行に関する
                'メッセージを表示します。
                nCount = Me.surveysTableAdapter.Update(rows)
                MessageBox.Show("Number of surveys submitted: " & nCount)
                GetSurveys()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error updating records")
            End Try
        Else
            MessageBox.Show("None of the records have been marked as " & _
                "complete. No updates to the database have been made.")
        End If
    
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. コントロールに値を入力し、[Completed] チェック ボックスをオンにして Order 10248 (VINET) の調査を完了させます。
  4. アクション ペインで [Submit] をクリックします。1 つの調査データがサブミットされたことを示すメッセージが表示されます。次のレコードが表示されます。
  5. コントロールに値を入力し、[Completed] チェック ボックスをオンにして Order 10249 (TOMSP) の調査を完了させます。ただし、アクション ペインでは、調査データをサブミットする [Submit] はまだクリックしないでください。
  6. bkMenu ブックマークで右クリックします。ショートカット メニューで [Next Order] をクリックし、次のレコードを表示します。
  7. コントロールに値を入力し、[Completed] チェック ボックスをオンにして、Order 10250 (HANAR) の調査を完了させます。
  8. [Submit] をクリックします。2 つの調査データがサブミットされたことを示すメッセージが表示されます。
  9. 変更を保存せずにドキュメントを閉じて、Word を終了します。

演習 4 - Word ドキュメントにデータをキャッシュする

この演習では、オフライン使用のために Word ドキュメントにデータをキャッシュする方法について説明します。ドキュメントにデータがキャッシュされると、読み取りおよび書き込みは、ドキュメントのデータ キャッシュに対して行います。

所要時間:

  • 実習 1: Word ドキュメントにデータをキャッシュする - 20 分

この演習では、演習 3 で作成した CustomerSurvey プロジェクトを使用します。

実習 1: Word ドキュメントにデータをキャッシュする

キャッシュされたデータセットをドキュメントに追加するには

  1. [Solution Explorer][ThisDocument.vb] を右クリックします。ショートカット メニューで [View Code] をクリックします。
  2. ドキュメント キャッシュに DataSet を格納するパブリック変数を ThisDocument クラスに追加します。
    <Cached()> Public dsCached As CustomerSurvey.NorthwindDataSet
    
  3. キャッシュされたデータセットを使用しているか否かを示す、プライベート メンバ変数を ThisDocument クラスに追加します。
    Private bCached As Boolean
    
  4. ドキュメントの保存時にデータをキャッシュするコードを ThisDocument_BeforeSave に追加します。
    Private Sub ThisDocument_BeforeSave(ByVal sender As Object, _
      ByVal e As Microsoft.Office.Tools.Word.SaveEventArgs) _
      Handles Me.BeforeSave
        Me.SurveysBindingSource.EndEdit()
        dsCached = Me.NorthwindDataSet
    End Sub
    
  5. キャッシュ データがドキュメント内にあるときはキャッシュからデータを使用するよう、GetSurveys メソッド内のコードを差し替えます。
    Private Sub GetSurveys()
        bCached = Not (dsCached Is Nothing)
    
        Try
            Me.Application.ScreenUpdating = False
            If Not bCached Then
                'このドキュメントにキャッシュされたデータが存在しない場合は、
                'ライブ データ ソースからデータセットを取得します。
                Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
                Me.SurveysTableAdapter.Fill(Me.NorthwindDataSet.Surveys)
            Else
                'キャッシュからデータセットをロードします。
                Me.NorthwindDataSet = dsCached
            End If
            'データ コネクタの設定を行います。
    Set up the data connectors.
            Me.SurveysBindingSource.DataMember = "Surveys"
            Me.SurveysBindingSource.DataSource = Me.NorthwindDataSet
            Me.CustomersBindingSource.DataMember = "FK_Survey_Customers"
            Me.CustomersBindingSource.DataSource = Me.SurveysBindingSource
            Me.Application.ScreenUpdating = True
        Catch ex As Exception
            Me.Application.ScreenUpdating = True
            MessageBox.Show(ex.Message, "Error retrieving data")
        End Try
    
    End Sub
    
  6. ビューの表示がキャッシュ データである場合、[SubmitPane] 内に、"[Cached]"というテキストを表示させ、ボタンのテキストを "Connect and Submit"と表示させるよう、UpdatePane メソッドを修正します。
    Private Sub UpdatePane()
    
        'SubmitPane コントロールを更新し、データソース内の現在の位置とデータ ソース内のレコード数を表示します。
        If Not (Me.ucSubmitPane Is Nothing) Then
            Dim sCaption As String
            Dim nCurrentRecord As Integer = Me.SurveysBindingSource.Position + 1
            Dim nRecords As Integer = Me.SurveysBindingSource.Count
            sCaption = nCurrentRecord & " of " & nRecords
            If bCached Then sCaption &= vbCrLf & "[Cached]"
            Me.ucSubmitPane.Message = sCaption
            If bCached Then 
               Me.ucSubmitPane.ButtonText = "Connect and Submit"
            Else
               Me.ucSubmitPane.ButtonText = "Submit"
            End If
        End If
    
    End Sub
    
  7. キャッシュ データセットを元にした更新を処理できるよう、SubmitPane コントロールの OnSubmit イベントを修正します。
    Private Sub ucSubmitPane_OnSubmit() Handles ucSubmitPane.OnSubmit
    
        '現在の編集を終了します。
        Me.SurveysBindingSource.EndEdit()
    
        'Surveyed フィールドに 1 が設定されている行を選択します。
        Dim rows() As CustomerSurvey.NorthwindDataSet.SurveysRow
        rows = Me.northwindDataSet.Surveys.Select("Surveyed=1")
    
        '選択された行が 1 つでもあれば、データベースの更新に
        '進みます。それ以外は、メッセージを表示します。
        If rows.Length > 0 Then
            Try
                Dim nCount As Integer
                '更新処理を実行し、更新対象の行に関する
                'メッセージを表示します。
                nCount = Me.surveysTableAdapter.Update(rows)
                MessageBox.Show("Number of surveys submitted: " & nCount)
                If bCached Then
                    dsCached.Clear()
                    dsCached = Nothing
                End If
                GetSurveys()
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Error updating records")
            End Try
        Else
            MessageBox.Show("None of the records have been marked as " & _
                "complete. No updates to the database have been made.")
        End If
    
    End Sub
    

チェックポイント

  1. [File] メニューで [Save All] をクリックします。
  2. [Debug] メニューで [Start] をクリックし、プロジェクトをビルドして、実行します。Customer Satisfaction Survey.doc ドキュメントが Word で開かれます。
  3. 現在データ ソースには 97 件の調査レコードが存在しており、現在のレコードは Order 10251 for VICTE となっています。
  4. Orders 10251 と 10252 の調査を完了させます。ただし、サブミットは行いません。
  5. [File] メニューで [Save As] をクリックします。[Save As] ダイアログ ボックスが表示されます。
  6. ファイル名に Cached.doc と指定してファイルを保存します。
  7. Cached.doc を閉じます。
  8. Cached.doc を開きます。
  9. アクション ペインには、図 19 に示すように、現在参照しているデータがキャッシュ データであることが示されます。また、10251 と 10252 での入力内容が格納されていることにも注目してください。

    作業中のデータがキャッシュ データであることを示すアクション ペイン (クリックすると拡大表示できます。)

    図 19. 作業中のデータがキャッシュ データであることを示すアクション ペイン (クリックすると拡大表示できます。)

  10. Order 10253 に移動し、調査を完了させます。
  11. アクション ペインで [Connect and Submit] をクリックします。3 つの調査データがサブミットされたことを示すメッセージが表示されます。調査データがサブミットされると、アクション ペインにはキャッシュ データを作業中ではなくなったことが示されます。このとき、ビューには 94 個の未記入の調査データが存在しています。
  12. ドキュメントを閉じて、Word を終了します。

まとめ

全演習を終了し、Microsoft Visual Studio 2005 Tools for the Microsoft Office System Beta 2 および Microsoft Office Word 2003 を使用して、顧客調査アプリケーションを作成する方法を学習しました。また、Windows Forms コントロールの使い方、ホスト コントロール、アクション ペイン、データ連結についても学習しました。

追加資料

追加情報として、以下の資料を参照してください。


Microsoft