ここでは、次のデータベース製品とサンプルを元に操作方法を解説します。
- Microsoft SQL Server 2005/2008/2008 R2/2012/2014
- AdventureWorksデータベース
データベースの接続
SQL Serverのデータソースをプロジェクトに登録します。この作業はMultiRowに依存しません。
- Visual Studioを起動して、新規にWindows Application プロジェクトを作成する。
- Visual Studioの[プロジェクト]−[新しいデータソースの追加]メニューをクリックする。
- Visual Studio 2010では、[データ]−[新しいデータソースの追加]メニューをクリックします。
- 表示された「データ ソース構成ウィザード」の画面で、「データベース」を選択し、[次へ]をクリックする。
- 表示された「データ接続の選択」画面で、[新しい接続]をクリックし次の構成で接続を追加する。
- データソース:Microsoft SQL Server (SqlClient)
- サーバー名(例):(local)\SQLEXPRESS
- データベースの選択または入力:AdventureWorks2012
- 接続を追加した後、[次へ]をクリックする。
- 「接続文字列をアプリケーション構成ファイルに保存する」画面で[次へ]をクリックする。
- 「データベース オブジェクトの選択」画面で、次の2つのテーブルのチェックをオンにする。
- Employee
- Person
- [完了]をクリックする。
- Visual Studioの「データソース」ウィンドウに「Employee」と「Person」が追加されていることを確認する。
テンプレートの設計
MultiRowのテンプレートを作成し、テーブルのフィールドを割り当てます。
- Visual Studioの[プロジェクト]−[新しい項目の追加]メニューをクリックする。
- 「新しい項目の追加」画面で、「MultiRow 8.0 テンプレート」を選択し、[追加]ボタンをクリックする。
- 「Template1.cs デザイン」画面が表示されることを確認する。
- 次の構成で列ヘッダを作成する。
- 「ツールボックス」ウィンドウから、ColumnHeaderCellをColumnHeaderSection1にドラッグする(4回繰り返す)。
- ドラッグしたセルのValueプロパティに「ID」「LastName」「PersonType」「JobTitle」を設定する。
- columnHeaderSection1の高さをセルの高さに合わせる。
- 次の構成で行を作成する。
- 「ツールボックス」ウィンドウから、RowHeaderCellをrow にドラッグする。
- 「ツールボックス」ウィンドウから、TextBoxCellをrowにドラッグする(2回繰り返す)。
- 「ツールボックス」ウィンドウから、ComboBoxCellをrowにドラッグする。
- ComboBoxCellのDropDownStyleプロパティにDropDownを設定する。
- ドラッグしたセルのDataFieldプロパティに「BusinessEntityID」「LastName」「PersonType」を設定する。(ComboBoxCellのDataFieldプロパティは空のまま)
- rowの高さをセルの高さに合わせる。
- テンプレートの幅をセルの幅に合わせる。
- プロジェクトを保存する。
グリッドへの接続
フォームにGcMultiRowコントロールを配置して、データソースとテンプレートをグリッドに割り当てます。
以上でグリッドへのテンプレートとデータソースの割り当ては完了です。プロジェクトを実行すると、データソースの値がグリッドに読み込まれます。
- フォーム(Form1)のデザイン画面を開く。
- 「データソース」ウィンドウから「Person」テーブルを選択し、ドロップダウンリストから「カスタマイズ...」をクリックする。
- 表示された「オプション」画面で「関連付けられたコントロール」の「GcMultiRow」のチェックをオンにする。
- [OK]ボタンをクリックしてダイアログを閉じる。
- 「データソース」ウィンドウから「Person」テーブルを選択し、ドロップダウンリストから「GcMultiRow」をクリックする。
- 「Person」テーブルをフォーム(Form1)のデザイン画面にドラッグ&ドロップする。
- フォームにBindingNavigator(personBindingNavigator)とGcMultiRow(personGcMultiRow)が配置されることを確認する。
- Visual Studioの[ビルド]−[ソリューションのビルド]メニューをクリックする。
- 「ツールボックス」ウィンドウから「Template1」をフォームにドラッグ&ドロップする。
- フォーム上のpersonGcMultiRowコントロールを選択し、スマートタグから「テンプレートの選択」で「template11」を選択する。
以上でグリッドへのテンプレートとデータソースの割り当ては完了です。プロジェクトを実行すると、データソースの値がグリッドに読み込まれます。
ルックアップ列の設定
PersonテーブルのBusinessEntityID列の値は、EmployeeテーブルのBusinessEntityID列の値と同じです。このBusinessEntityID列の値を元に、EmployeeテーブルのJobTitle列の値を列挙します。
プロジェクトを実行すると、ComboBoxCellにJobTitle列の値が列挙されることを確認できます。
- 「データソース」ウィンドウから「Employee」テーブルを選択し、フォーム(Form1)のデザイン画面にドラッグ&ドロップする。
- フォーム上に配置されるDataGirdViewコントロールを削除する。
- フォームのコードエディタを開き、次のコードを貼り付ける。
Imports GrapeCity.Win.MultiRow Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim myTemplate As New Template1() Dim ComboBoxCell = DirectCast(myTemplate.Row("ComboBoxCell1"), ComboBoxCell) ComboBoxCell.DataSource = Me.EmployeeBindingSource ComboBoxCell.DisplayMember = "JobTitle" ComboBoxCell.ValueMember = "BusinessEntityID" ComboBoxCell.DataField = "BusinessEntityID" Me.PersonGcMultiRow.Template = myTemplate 'TODO: このコード行はデータを 'AdventureWorks2012DataSet.Employee' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 Me.EmployeeTableAdapter.Fill(Me.AdventureWorks2012DataSet.Employee) 'TODO: このコード行はデータを 'AdventureWorks2012DataSet.Person' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 Me.PersonTableAdapter.Fill(Me.AdventureWorks2012DataSet.Person)End Sub
using GrapeCity.Win.MultiRow; private void Form1_Load(object sender, EventArgs e) { Template1 myTemplate = new Template1(); ComboBoxCell comboBoxCell = myTemplate.Row["comboBoxCell1"] as ComboBoxCell; comboBoxCell.DataSource = this.employeeBindingSource; comboBoxCell.DisplayMember = "JobTitle"; comboBoxCell.ValueMember = "BusinessEntityID"; comboBoxCell.DataField = "BusinessEntityID"; this.personGcMultiRow.Template = myTemplate; // TODO: このコード行はデータを 'adventureWorks2012DataSet.Employee' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.employeeTableAdapter.Fill(this.adventureWorks2012DataSet.Employee); // TODO: このコード行はデータを 'adventureWorks2012DataSet.Person' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.personTableAdapter.Fill(this.adventureWorks2012DataSet.Person);}
プロジェクトを実行すると、ComboBoxCellにJobTitle列の値が列挙されることを確認できます。