プレゼンテーション層
データソースRADツール
データセットを作成したら、最上部の[Data]メニューから[Data Sources]ウィンドウを開きます。このウィンドウには作成したデータセットが表示されますが、データベースサーバー、ローカルデータベースファイル(AccessやFoxProなど)、Webサービス、または定義済みのビジネスオブジェクトクラスから他のデータソースを追加することもできます。ウィザードを使用すると、画面に表示される指示に従ってデータソースを追加できます。また、テーブルノードを展開し、データテーブルで利用可能なすべてのフィールドを参照することもできます。

フォームをIDEで開いているときは、[Data Sources]ウィンドウにいくつかの追加の機能が現れます。各ノードを選択すると、ドロップダウン(コンボ)ボックスが表示され、フォームにドラッグしたオブジェクトをどのように表示するかを選択することができます。テーブルの場合は、グリッドビュー(DataGridView)と詳細ビューの2つの選択肢があります。グリッドビューでは、各フィールドを既定の形式で実装するDataGridViewコントロールが作成されます(別の埋め込みコントロールを表示するように編集することもできます)。詳細ビューでは、レコードを1件ずつ表示できるように、個々のフィールドに関するラベルとテキストボックス(または他のコンポーネント)が作成されます。
使用可能なフィールドコントロールはTextbox、NumericUpDown、Combobox、Label、Linked Label、およびListboxです。独自のユーザーコントロールを作成してリストに追加することもできます。

Data Sourcesツールは、開発者がデータベーススキーマに基づいてユーザーインターフェイス(UI)を短期間で作成できるRAD(Rapid Application Development)環境を実現します。VS2005では、コントロールをデータセットのフィールドに直接バインドする代わりに、データセット内のデータオブジェクトと相互に連携するBinding Sourceという新しい層が追加されています。UI上のコントロールは、Binding Sourceのフィールドにバインドされます。これはBinding ContextオブジェクトとDataViewオブジェクトが組み合わさった新しいコンポーネントです。
各コントロールでは、バインド可能なプロパティの数を減らすことで、バインドを簡略化しています。バインド可能なプロパティは、タグ、テキスト、選択値など、一般的なものだけに制限されています。詳細設定を使用すれば他の数多くのプロパティにバインドすることも可能ですが、通常は一般的なバインドが主に使用され、データソースウィザードの既定値になっています。
Orders表示/編集画面の作成
それではOrdersデータを編集するためのフォームを作成しましょう。ソリューションエクスプローラでプロジェクトを右クリックし、[Add]-[New Item]の順に選択します。次にWindowsフォームアイコンを選択し、「OrdersForm.vb」という名前を付けます。作業用の空白フォームが表示されます。
[Data Sources]ウィンドウが開いていない場合は、最上部の[Data]メニューをクリックし、[Show Data Sources]を選択します。ツリーには、データセットとデータテーブルが表示されるはずです。各テーブルの右側にあるドロップダウンリストで、テーブルをグリッドビューとして実装するか、フリーフォームの詳細ビューとして実装するかを選択できます。さらに、テーブルを展開するとデータフィールドが表示され、同様にどのコントロールを使ってフリーフォームのコントロール内のフィールドを実装するかを選択できます(注意:ベータ版では、グリッドビュー内でのフィールドの表示方法も設定できましたが、最終版ではこれが削除されており、テキストボックスのみが表示されます。ただし、後から列を編集して変更することはできます)。[Tools]-[Options]-[Windows Forms Designer]-[Data UI Customization]の順に選択してこのウィザードを変更し、カスタムコントロールも表示することができます。
通常、多くのプレゼンテーションでは親画面を詳細形式で表示することが望ましいので、[Data Sources]ウィンドウで「Orders」テーブルの形式を[Details]に変更します。次に、[Data Sources]ウィンドウから「Orders」テーブルをドラッグし、Visual Studioのデザインサーフェイスにある空白フォームの左上隅にドロップします。指定した既定値に従って、データソースウィザードがテーブル内の各コントロールを作成します。[Data Sources]ウィンドウからフィールドを1つずつドラッグすることもできますが、一度にすべて作成した方がはるかに短時間で済みます。各コントロールに正しく名前が付けられ、テーブル内の適切なフィールドにバインドされることが分かります。さらに、各コントロールのラベルも作成されます(説明プロパティが設定されている場合はその値、設定されていない場合はフィールドの名前が使われ、必要に応じてスペースが挿入されます)。
追加されるのはコントロールだけではありません。レコード間を移動するための、ビデオデッキのボタンに似たデータナビゲーションストリップも追加されます。また、データセットおよびデータベースとの接続/バインドを実現するために必要なコンポーネントも追加されます。コードウィンドウを開くと、Table Adapterコンポーネントを呼び出してデータセットコンポーネントにデータを読み込むためのコード行も追加されていることが分かります。プロジェクトをスタートアッププロジェクトに設定し、プロジェクトのプロパティでこのフォームを起動時に表示するように設定すると、ソリューションを今すぐビルドして実行し、すべての機能を備えたフォームを表示して、「Orders」テーブルのすべてのレコードを参照することができます。コンボボックスコントロールを正しく機能させるために多少の作業が必要ですが、フォームは基本的に動作可能な状態になります。
コンボボックスを機能させるには、データセットを開いて「Customer」テーブルと「Employee」テーブルを追加します(またはこれらのテーブル用に単独のデータセットを作成します)。プロジェクトをビルドした後、[Data Sources]ウィンドウをリフレッシュして新しいテーブルを確認するか、新しいデータソースを追加します(テーブルを別のデータセットに入れる場合)。
フォームに戻り、[Data Sources]ウィンドウから「Employee」テーブルをドラッグして、コンボボックスにドロップします。最初に気付くのは、「Employee」テーブル用に別のBinding Sourceコンポーネントが追加されていることです。Employeeコンボボックスコントロールを選択すると、Data Source、Display Member、およびValue Memberの適切な設定が行われていることと、バインドがTextからSelected Valueに変更されていることが分かります。これはMicrosoftが「Connect the dots」と呼ぶもので、テーブルを任意のリスト方式のコントロールにドラッグ&ドロップできる機能です。ウィザードはValue Memberの主キーとDisplay Memberプロパティの最初の文字フィールドを使用します。
同じ方法で「Customer」テーブルをCustomerコンボボックスにドラッグすると、やはりテーブル用にBinding Sourceコンポーネントが追加されます。また、フォームの分離コードを開き、OrdersForm_Loadクラスのコードを見ると、フォームに追加されている個々のBinding Sourceに対して、データセット内のデータをテーブルに読み込むコードが追加されていることが分かります。
コントロールを少し並べ替えた後のフォームは、次のような外観になります。
マスタ/詳細プレゼンテーション
リレーショナルアプリケーションで重要なのは、親子のリレーションシップを表示する機能です。Visual Studio 2005には、この機能を短期間で開発するためのかなり柔軟性の高いツールが用意されています。[Data Sources]ウィンドウでテーブルを展開すると、フィールドの下に、テーブルの各子リレーションシップのエントリが表示されます。本稿の例では、[Orders]テーブルノードを展開すると、「Order Details」テーブルに対するリレーションシップのエントリが表示されます。グリッドビュー表示を選択し、リレーションノードをフォームにドラッグすると、マスタ/詳細配置を指定しているものと判断され、必要なリンクが自動的に作成されます。
テーブルのフォームには、新しいBindingSourceコンポーネントが追加されます。さらに、フォームのロード時にテーブルへのデータ読み込みを行うテーブルアダプタが追加されます。スマートタグ(グリッドコントロールの右上にある矢印)をクリックすると、コントロールのいくつかのプロパティとアクションが表示されます。[Choose Data Source]を選び、テーブル間のリレーションシップに基づく新しいBinding Sourceを指定する必要があります。マスタレコードにリンクする詳細グリッドを設定するために必要な操作はこれだけです。プロパティを見ると、新たに追加されたBinding SourceのData SourceがOrdersBindingSourceになり、Data Memberがリレーションシップになっていることが分かります。
ここでプロジェクトをコンパイルして実行すると、マスタ部分と詳細部分とのリンクを確認できます。しかし、グリッドに有用なデータを表示するには、多少の編集が必要です。
ProductIDをコンボボックスに置き換えて、製品の名前を表示する必要があります。それには、フォームに別のBinding Sourceを追加します。ツールボックスの[Data]セクションからBinding Sourceコンポーネントをドラッグし、「ProductsBindingSource」という名前を付け、Data SourceプロパティをOrdersDataSetに、Data Memberプロパティを「Products」テーブルに設定します。
次に、DataGridViewコントロールのスマートタグを再び展開し(または[Properties]ウィンドウを参照し)、[Edit Columns]アクションをクリックします。これにより、列の幅とスタイルを編集し、列の順序を変更し、列を追加または削除できるようになります。不要な列を削除し、主キーフィールドと外部キーフィールドを非表示にします(VisibleプロパティをFalseに設定)。また、ProductID列をテキストボックスコントロールからコンボボックスコントロールに変換し、Product Nameの値を表示する必要もあります。Data SourceプロパティをProductsBindingSourceに、Display MemberをProductNameに、Value MemberをProductIDに設定します。
Order Detail Binding Sourceが追加されるときに、「Order Detail」テーブルにデータを読み込むためのコード行も追加されます。これはOrdersForm_Loadイベントに追加されます。
Dim OrdersDetailTableAdapter As New Order_DetailsTableAdapter OrdersDetailTableAdapter.Fill(Me.OrdersDataSet.Order_Details)
必要な作業は以上です。[F5]キーを押して(または[Debug]メニューの[Start Debugging]を選択して)アプリケーションをビルドし、実行することができます。完成したフォームの実行例を次に示します。ナビゲーションバーを使ってレコード間を移動できることや、選択中のOrdersレコードとOrder Detail情報がリンクしていることが分かります。ナビゲーションバーには、新しいレコードを作成するボタン(黄色い十字型)、現在のレコードを削除するボタン(赤いX印)、および変更を保存するボタン(フロッピーディスクのアイコン)も表示されます。
マスタ/詳細フォームのRAD構築ウィザードはVS2003にも用意されていましたが、VS2003のウィザードは柔軟性に欠けていました。VS2005のインフラストラクチャでは、多種多様なフォームスタイルのRAD構築を行うことができます。Data Sourcesツールは、Visual Studioの歓迎すべき改良点です。




