True DBGrid for WinForms は、階層化されたデータを表示できます。一般に、階層化データは、複数のリレーショナルテーブルに格納されているデータを参照します。リレーショナルテーブルでは、マスターテーブル(親テーブル)がキーフィールドによって詳細テーブル(子テーブル)にリンクされます。データを階層表示すると、最初にマスターデータが表示され、ユーザーは、クリックするだけで、同じグリッド内に関連する詳細データを表示できます。
グリッドをマスター/詳細データソースに連結する場合は、水平テーブル領域(バンド)を使って階層化データの関連グループを表示します。バンドは、データそのものではなく、階層 DataSet を仮想的に表現したものです。バンドは、階層レコードセット内の各レベルごとに作成され、テーブル全体または選択された少数のフィールドだけを入れることができます。実行時、ユーザーは、ツリー表示に似たインタフェースを使用して、バンドを展開したり、折りたたむことができます。
この機能を使用するには、DataView プロパティをDataViewEnum.Hierarchicalに設定する必要があります。また、グリッドコントロールを階層化された DataSet に連結する必要があります。その1つの方法として、DataSource プロパティを使用します。
次の図に、2つのテーブルの関係を例示します。この図は、.NET xsd ファイルエディタ画面の例です。ここでは、Composer テーブルと Opus テーブルが関連付けられています。どちらのテーブルにも Last フィールドがあり、このフィールドが両方のテーブルの主キーになっています。また、Composer テーブルと Opus テーブルの Last フィールドはどちらも同じものです。そこで、このフィールドに基づいて2つのテーブルを連結すると、これらのテーブルによる階層化 DataSet を作成できます。
バンドとグリッドの階層表示を使用することによって、この階層化 DataSet をグリッドに表示できます。3つの手順を踏むだけで、上の DataSet を C1TrueDBGrid に表示できます。次にその手順を示します。
実行時、グリッドには読み取り専用のデータが表示されます。次の図は、グリッドの表示例です。最初にマスターレコードセット(Composer)のデータが表示され、詳細レコードセットバンドのフィールドが右側に表示されます。ただし、詳細レコードセットのフィールドには、最初はデータが含まれていません。レコードの左端の展開アイコン( + )が、階層化データがあることを示しています。
ユーザーが展開アイコンをクリックすると、アイコンは折りたたみアイコン( - )に変わり、横のバンド(Orders)が展開して、クリックした行の詳細レコードが表示されます。
メモ:C1TrueDBGrid DataView プロパティがデフォルト値のDataViewEnum.Normalに設定されている場合、グリッドにはフラットファイルだけが表示され、階層表示はサポートされません。データソースが階層化されたDataSetであっても、グリッドに表示されるのは、マスターテーブルのデータだけです。
DataView プロパティは設計時に設定する必要があります。実行時には変更できません。
階層表示のグリッドを操作するために、次のメソッドが用意されています。
メソッド | 説明 |
---|---|
GetBand | 指定された列インデックスに対応するバンドを返す。 |
CollapseBand | 指定されたバンドのすべての行を折りたたむ。 |
ExpandBand | 指定されたバンドのすべての行を展開する。 |
RowExpanded | 指定されたバンド内で現在の行が展開されている場合は、True を返す。 |
マスター/詳細データソース内のレコードセットのレベル数が事前にわからない場合は、コード内で Bands プロパティを調べます。利用できるバンドの数は、0から -1 までです。
アプリケーションで次のイベントを使用すると、ユーザーによって開始された階層表示操作に応答できます。
イベント | 説明 |
---|---|
Collapse | ユーザーがバンドを折りたたむと発生する。 |
Expand | ユーザーがバンドを展開すると発生する。 |