WinNavigationBar™ は任意のタイプの階層的なデータを表示できます。最も一般的なデータのフォームは DataSet です。DataSet は単一テーブルまたは複雑なデータ関係を持つ複数のテーブルを構成することができます。WinNavigationBar を単一データ テーブルにバインドすることはあまり印象的ではありませんが、そのデータ テーブルがデータ リレーションを含む場合、行の子行を比較的簡単に表示することができます。データ リレーションの表示は、DataRows、DataRelations、および DataRows(子行を表す)をループするためにいくつかの FOREACH ループを必要とします。どれぐらい多くのリレーションがあるか分からない場合、行の子行を再帰的に取得するメソッドを作成できます。ただし、このトピックは行とその子の間のひとつのデータ リレーションをフォーカスするだけです。
この詳細なガイドを読み終わる時には、Northwind データ ソース(特に Customers テーブルと Orders テーブル)でフォームを設定したり、WinNavigationBar の位置に階層的なデータをロードできます。
データ ソースを構成します。
新しい C# または Visual Basic プロジェクトで、Visual Studio IDE の上部のメイン メニューで [データ] メニュー項目をクリックします。結果のメニューから [新しいデータ ソースを追加] をクリックします。[データ ソース構成] ウィザードが表示します。
データベースがウィザードで選択されていることを確認して [次へ] をクリックします。
[データ接続を選択] ページで、[新しい接続] ボタンをクリックします。[接続を追加] ダイアログ ボックスが表示します。
[変更] ボタンをクリックします。[データ ソースを変更] ダイアログ ボックスが表示します。
データ ソースのリストから [Microsoft Access Database File] を選択して [OK] をクリックし、ダイアログ ボックスを閉じます。
[参照] ボタンをクリックします。[Microsoft Access Database File を選択] ダイアログ ボックスが表示します。この例では、Northwind データベース(NWind.mdb)を使用します。これは Infragistics SDK インストールの一部として使用できます。デフォルトで、NWind.mdb ファイルは、オペレーティング システムによって、以下のインストール フォルダに配置されています。
XP — C:\Documents and Settings\All Users\Documents\Infragistics\2025.1Ultimate UI for Windows Forms 2025.1\Samples\WinForms\Data
Vista — C:\Users\Public\Documents\Infragistics\2025.1Ultimate UI for Windows Forms 2025.1\Samples\WinForms\Data
[OK] をクリックして [接続を追加] ダイアログ ボックスを閉じます。
[データ ソース構成] ウィザードで [次へ] をクリックします。ダイアログ ボックスが表示され、データベース ファイルをプロジェクトにコピーして接続を変更するかどうかを尋ねられます。[はい] をクリックして、先に進みます。
[次へ] をクリックして NWindConnectionString として接続を保存します。
ウィザードの次のページで、データベース オブジェクトを選択できます。テーブルを展開して、Customers と Orders の両方を選択します。
[完了] をクリックしてウィザードを閉じます。NWindDataSet がソリューション エクスプローラのプロジェクトに追加されます。
F6 を押してプロジェクトをビルドします。Visual Studio ツールボックスで、3 つのコンポーネントが [ProjectName コンポーネント] タブの下に作成されます。
NWindDataSet、CustomersTableAdapter、および OrdersTableAdapter をダブルクリックし、3 つのコンポーネントすべてがコンポーネント トレイに追加されます。
WinNavigationBar をフォームに追加します。
Visual Studio ツールボックスで UltraNavigationBar を指定してダブルクリックします。UltraNavigationBar がフォームに追加されます。
UltraNavigationBar が選択され、[プロパティ] ウィンドウで Dock プロパティを指定して Top に設定します。フォームは以下のスクリーンショットのようになります。
フォームのヘッダをダブルクリックしてフォームの Load イベントを作成します。Load イベントが作成され、コード表示されます。
データセットを満たします。
コードの以下の 2 行がフォームの Load イベントになければ追加してください。Customers テーブルと Orders テーブルをデータで埋めるためには、これらの 2 行のコードが必要になります。
Visual Basic の場合:
Me.CustomersTableAdapter1.Fill(Me.NWindDataSet1.Customers) Me.OrdersTableAdapter1.Fill(Me.NWindDataSet1.Orders)
C# の場合:
this.customersTableAdapter1.Fill(this.nWindDataSet1.Customers); this.ordersTableAdapter1.Fill(this.nWindDataSet1.Orders);
WinNavigationBar の位置にデータをロードします。
WinNavigationBar の RootLocation の DisplayText を「Customers」に設定します。これはエンド ユーザーが見る最初の位置で、ツリータイプのコントロールとまったく同じようにあらゆる位置はこの位置から始まります。ルート位置の複数の位置を移植するには、Customers テーブルで各行を反復し、行ごとに新しい Location オブジェクトをインスタンス化する必要があります。FOREACH ループを使用してこの作業を達成できます。
各行を適切な位置にロードすると、別の FOREACH ループを使用して現在の行と子行のデータ リレーションを識別することができます。現在の行とその子行で見つける各 DataRelation については、ユーザーは子行をループし、現在の行の下に個別の位置としてそれぞれを追加します。深く進むことができるのはひとつのレベルだけですが、OrderDetails テーブルも持っている場合、Orders テーブルと OrderDetails テーブル間により多くの子行を含む別の DataRelation を持つことができます。
テーブル アダプタ Fill メソッドの後に以下のコードを配置します。
Visual Basic の場合:
Me.UltraNavigationBar1.RootLocation.DisplayText = "Customers"
' 位置をインスタンス化しますが、未だ設定していません。
Dim location As Infragistics.Win.Misc.UltraNavigationBarLocation
' Customers テーブルで各行をループします。
For Each row As DataRow In NWindDataSet1.Tables("Customers").Rows
' 現在の行の項目の配列を取得します。
Dim items As Object() = row.ItemArray
' 位置を作成し、顧客名にキーを設定します。
location = New Infragistics.Win.Misc.UltraNavigationBarLocation _
(items(1).ToString())
' WinNavigationBar のルートに位置を追加します。
Me.UltraNavigationBar1.RootLocation.Locations.Add(location)
' 現在の行とその子のすべてのデータ リレーション
' をループします。
For Each relation As DataRelation In row.Table.ChildRelations
' 現在の行の子行すべてを含む
' DataRows の配列を作成します。
Dim childRows As DataRow() = row.GetChildRows(relation)
' 子行をループし、現在の行を表す
' 位置コレクションに子行を
' 追加します。
For Each childRow As DataRow In childRows
' 子行の項目の配列を取得します。
Dim childItems As Object() = childRow.ItemArray
' 子の位置のキーとしてオーダー番号を追加します。
location.Locations.Add(childItems(0).ToString())
Next
Next
Next
C# の場合:
this.ultraNavigationBar1.RootLocation.DisplayText = "Customers";
// 位置をインスタンス化しますが、未だ設定していません。
Infragistics.Win.Misc.UltraNavigationBarLocation location;
// Customers テーブルで各行をループします。
foreach (DataRow row in nWindDataSet1.Tables["Customers"].Rows)
{
// 現在の行の項目の配列を取得します。
object[] items = row.ItemArray;
// 位置を作成し、顧客名にキーを設定します。
location = new Infragistics.Win.Misc.UltraNavigationBarLocation
(items[1].ToString());
// WinNavigationBar のルートに位置を追加します。
this.ultraNavigationBar1.RootLocation.Locations.Add(location);
// 現在の行とその子のすべてのデータ関係
// をループします。
foreach (DataRelation relation in row.Table.ChildRelations)
{
// 現在の行の子行すべてを含む
// DataRows の配列を作成します。
DataRow[] childRows = row.GetChildRows(relation);
// 子行をループし、現在の行を表す
// 位置コレクションに子行を
// 追加します。
foreach (DataRow childRow in childRows)
{
// 子行の項目の配列を取得します。
object[] childItems = childRow.ItemArray;
// 子の位置のキーとしてオーダー番号を追加します。
location.Locations.Add(childItems[0].ToString());
}
}
}
アプリケーションを実行します。
アプリケーションを実行すると、Customers という名前のひとつの位置を持つ WinNavigationBar が表示されます。Customers の右の矢印をクリックすると、顧客名が移植されたドロップダウン リストが表示されます。顧客名をクリックすると、その名前は上のテキスト ボックスに入れられます。顧客名の右の矢印をクリックすると、ドロップダウン リストには顧客のオーダーが移植されます。