このトピックは、高度なデータ フィルタリング ルールおよびその間の論理接続を作成する方法を紹介します。
このトピックは、以下のセクションで構成されます。
クロス フィールド レコード フィルタリング機能は、フィルター グループのグループ化を可能にし、論理演算子で接続可能な高度なフィルタリング ルールを作成できます。たとえば、同時に 2 つのフィールドに指定した値があるレコードのみを表示、あるいは 3 つ目のフィールドに指定した値のあるレコードのみを表示できます。XAML またはコードでクロス フィールド レコード フィルタリング機能を設定できます。または、ダイアログでクロス フィールド レコード フィルタリング機能を設定できます。
クロス フィールド レコード フィルタリングはフィールド固有のレコード フィルタリングと結合されます。つまり、レコードがクロス フィールド レコード フィルタリング条件と一致しても、フィールド固有のフィルタリング条件と一致する必要もあります。
クロス フィールド レコード フィルタリングは FieldLayoutSettings.RecordFilterScope プロパティの値に基づき階層データ ソースのレコードに影響します。SiblingDataRecords 値の場合、フィルタリングは各フィールド レイアウトのクロス フィールド レコード フィルタリングのルールを適用します。AllRecords 値の場合、ルート レイアウトのフィルタリング ルールはすべてのレベルに適用されます。
許可される場合、ダイアログでクロス フィールド レコード フィルタリングを編集できます。ダイアログは、以下の画面のようにヘッダー プレフィックス領域メニューからメニュー項目を選択して開いています。
以下の画面は、定義されたフィルター ルールがあるクロス フィールド レコード フィルタリング ダイアログを表示します。
以下はダイアログのオプションです。
新しいフィルタリング条件を追加します。
選択したフィルタリング条件を削除します。
AND 論理演算子を使用して 2 つ以上のフィルタリング条件をグループ化します。
OR 論理演算子を使用して 2 つ以上のフィルタリング条件をグループ化します。
選択されているグループの論理演算子 (AND <> OR) を切り替えます。
グループ化されているがルート レベル グループにない (フィールド レイアウトの CrossFieldRecordFilters プロパティに直接定義) 場合、選択された項目をグループ化解除します。
すべての定義されるフィルターはダイアログの下部に説明されます。
CrossFieldRecordFilter クラスによって表されるクロス フィールド レコード フィルターは、FieldLayout.CrossFieldRecordFilters
プロパティによって各フィールド レイアウトで定義されます。有効なフィルターで以下のことが指定されます:
クロス フィールド レコード フィルターは CrossFieldRecordFilterGroup 型によって表されるグループでグループ化できます。LogicalOperator プロパティを使用してグループの論理演算子を設定できます。
以下のコード スニペットは、次の一致条件のクロス フィールド レコード フィルターを定義する方法を紹介します。
「ContactName」フィールドが「A」で開始し、「Country」フィールドが「UK」または「USA」と等しいレコードを含みます。
XAML の場合:
<igDP:XamDataGrid x:Name="xamDataGrid1">
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowCrossFieldRecordFiltering="True" />
</igDP:XamDataGrid.FieldSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.CrossFieldRecordFilters>
<igDP:CrossFieldRecordFilterGroup LogicalOperator="And">
<igDP:CrossFieldRecordFilterGroup LogicalOperator="Or">
<igDP:CrossFieldRecordFilter FieldName="Country" Operator="Equals" Operand="UK" />
<igDP:CrossFieldRecordFilter FieldName="Country" Operator="Equals" Operand="USA" />
</igDP:CrossFieldRecordFilterGroup>
<igDP:CrossFieldRecordFilter FieldName="ContactName" Operator="StartsWith" Operand="A" />
</igDP:CrossFieldRecordFilterGroup>
</igDP:FieldLayout.CrossFieldRecordFilters>
<igDP:TextField Name="CustomerID" Label="ID" />
<igDP:TextField Name="ContactName" Label="Contact Name" />
<igDP:TextField Name="Country" Label="Country" />
<igDP:TextField Name="City" Label="City" />
<igDP:TextField Name="CompanyName" Label="Company Name" />
<igDP:TextField Name="Phone" Label="Phone" />
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
Visual Basic の場合:
Me.xamDataGrid1.FieldSettings.AllowCrossFieldRecordFiltering = True
Dim fGroup1 As New CrossFieldRecordFilterGroup()
fGroup1.LogicalOperator = LogicalOperator.[Or]
fGroup1.Filters.Add(New CrossFieldRecordFilter() With { _
.FieldName = "Country", _
.[Operator] = ComparisonOperator.Equals, _
.Operand = "UK" _
})
fGroup1.Filters.Add(New CrossFieldRecordFilter() With { _
.FieldName = "Country", _
.[Operator] = ComparisonOperator.Equals, _
.Operand = "USA" _
})
Dim fGroup2 As New CrossFieldRecordFilterGroup()
fGroup2.LogicalOperator = LogicalOperator.[And]
fGroup2.Filters.Add(fGroup1)
fGroup2.Filters.Add(New CrossFieldRecordFilter() With { _
.FieldName = "ContactName", _
.[Operator] = ComparisonOperator.StartsWith, _
.Operand = "A" _
})
Dim fl As New FieldLayout()
fl.Fields.Add(New TextField() With { _
.Name = "CustomerID", _
.Label = "ID" _
})
fl.Fields.Add(New TextField() With { _
.Name = "ContactName", _
.Label = "Contact Name" _
})
fl.Fields.Add(New TextField() With { _
.Name = "Country", _
.Label = "Country" _
})
fl.Fields.Add(New TextField() With { _
.Name = "City", _
.Label = "City" _
})
fl.Fields.Add(New TextField() With { _
.Name = "CompanyName", _
.Label = "Company Name" _
})
fl.Fields.Add(New TextField() With { _
.Name = "Phone", _
.Label = "Phone" _
})
fl.CrossFieldRecordFilters = fGroup2
Me.xamDataGrid1.FieldLayouts.Add(fl)
C# の場合:
this.xamDataGrid1.FieldSettings.AllowCrossFieldRecordFiltering = true;
CrossFieldRecordFilterGroup fGroup1 = new CrossFieldRecordFilterGroup();
fGroup1.LogicalOperator = LogicalOperator.Or;
fGroup1.Filters.Add(
new CrossFieldRecordFilter()
{
FieldName = "Country",
Operator = ComparisonOperator.Equals,
Operand = "UK"
});
fGroup1.Filters.Add(
new CrossFieldRecordFilter()
{
FieldName = "Country",
Operator = ComparisonOperator.Equals,
Operand = "USA"
});
CrossFieldRecordFilterGroup fGroup2 = new CrossFieldRecordFilterGroup();
fGroup2.LogicalOperator = LogicalOperator.And;
fGroup2.Filters.Add(fGroup1);
fGroup2.Filters.Add(
new CrossFieldRecordFilter()
{
FieldName = "ContactName",
Operator = ComparisonOperator.StartsWith,
Operand = "A"
});
FieldLayout fl = new FieldLayout();
fl.Fields.Add(new TextField() { Name = "CustomerID", Label = "ID" });
fl.Fields.Add(new TextField() { Name = "ContactName", Label = "Contact Name" });
fl.Fields.Add(new TextField() { Name = "Country", Label = "Country" });
fl.Fields.Add(new TextField() { Name = "City", Label = "City" });
fl.Fields.Add(new TextField() { Name = "CompanyName", Label = "Company Name" });
fl.Fields.Add(new TextField() { Name = "Phone", Label = "Phone" });
fl.CrossFieldRecordFilters = fGroup2;
this.xamDataGrid1.FieldLayouts.Add(fl);