インデックスを使用したデータのグループ化
ソートとインデックス付け への移動
クライアント データセットでインデックスを使用する場合は、レコードのソート順序が自動的に決まります。この順序のために、隣接するレコードでは、通常、インデックスを構成するフィールドの値が重複します。たとえば、SalesRep フィールドと Customer フィールドでインデックス付けされている、次のような受注テーブルの一部を考えてみましょう。
SalesRep | Customer | OrderNo | Amount |
---|---|---|---|
1 |
1 |
5 |
100 |
1 |
1 |
2 |
50 |
1 |
2 |
3 |
200 |
1 |
2 |
6 |
75 |
2 |
1 |
1 |
10 |
2 |
3 |
4 |
200 |
このソート順序のために、SalesRep 列の隣接する値が重複しています。SalesRep が 1 のレコードでは、Customer 列の隣接する値が重複しています。つまり、データは SalesRep でグループ化され、SalesRep グループ内では Customer でグループ化されます。グループ化にはそれぞれレベルが関連付けられています。この例では、SalesRep グループはレベル 1(他のどのようなグループにもネストしていないため)で、Customer グループはレベル 2(レベル 1 のグループにネストしているため)です。グループ化レベルは、インデックスにおけるフィールドの順序に対応しています。
クライアント データセットでは、現在のレコードが、指定されたグループ化レベル内のどこにあるかを特定できます。これにより、アプリケーションでは、レコードがグループの先頭にあるか中央にあるか、それとも最後にあるかによって、レコードの表示を変えることができます。たとえば、グループの先頭レコードにだけフィールド値を表示し、重複する値を表示しないようにすることもできます。上記のテーブルでこれを行うと、次のような結果になります。
SalesRep | Customer | OrderNo | Amount |
---|---|---|---|
1 |
1 |
5 |
100 |
2 |
50 | ||
2 |
3 |
200 | |
6 |
75 | ||
2 |
1 |
1 |
10 |
3 |
4 |
200 |
現在のレコードが指定のグループ内のどこに位置するかを判定するには、GetGroupState メソッドを使用します。GetGroupState では、グループのレベルを指定する整数を受け取り、現在のレコードがそのグループ内のどこにあるか(先頭レコード、最終レコード、またはそのどれでもない)を示す値を返します。
インデックスを作成する際には、(インデックスに含まれるフィールドの数を上限として)そのインデックスでサポートされるグループ化レベルを指定できます。GetGroupState では、そのレベルを超えるグループの情報は提供できません。たとえ、インデックスによるレコードのソートが追加のフィールドに基づいていても状況は変わりません。