XamDataGridでコードでフィルターをかけたい場合で、特定列で複数の条件のいずれかに一致するもののみを残したい場合は、クロス フィールド レコード フィルタリング機能を利用します。
例えば、

のように、”department”列の値が”人事”と”事務”のいずれかに等しいものを残してそれ以外をフィルターしたいという場合は、
- XamDataGridのFieldSettingsでAllowCrossFieldRecordFilteringをTrueに設定し、クロス フィールド レコード フィルタリング機能を有効にする。
- FieldLayoutのCrossFieldRecordFiltersを構成する。
- CrossFieldRecordFilterGroupを作成し、ここに追加する各フィルター条件をORで評価するように設定する。
- “department”列の値が”人事”と等しいものというフィルター条件を作成し、CrossFieldRecordFilterGroupに追加する。
- “department”列の値が”事務”と等しいものというフィルター条件を作成し、CrossFieldRecordFilterGroupに追加する。
- CrossFieldRecordFilterGroupをFieldlayoutのCrossFieldRecordFiltersとして設定する。
で可能です。
<igDP:XamDataGrid ...>
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowCrossFieldRecordFiltering="True" />
</igDP:XamDataGrid.FieldSettings>
...
</igDP:XamDataGrid>
// CrossFieldRecordFilterGroupのインスタンスを作成する。
// この中に入る各フィルター条件を"OR"で評価する設定をする。
CrossFieldRecordFilterGroup filterGroup = new CrossFieldRecordFilterGroup();
filterGroup.LogicalOperator = Infragistics.Windows.Controls.LogicalOperator.Or;
// "department"列の値が"人事"と等しいものというフィルター条件を作成し、CrossFieldRecordFilterGroupに追加する。
CrossFieldRecordFilter filter1 = new CrossFieldRecordFilter()
{
FieldName = "department",
Operator = Infragistics.Windows.Controls.ComparisonOperator.Equals,
Operand = "人事"
};
filterGroup.Filters.Add(filter1);
// 同様に、"事務"と等しいものというフィルター条件を作成し、CrossFieldRecordFilterGroupに追加する。
CrossFieldRecordFilter filter2 = new CrossFieldRecordFilter()
{
FieldName = "department",
Operator = Infragistics.Windows.Controls.ComparisonOperator.Equals,
Operand = "事務"
};
filterGroup.Filters.Add(filter2);
// CrossFieldRecordFilterGroupをFieldlayoutのCrossFieldRecordFiltersとして設定する。
fieldLayout1.CrossFieldRecordFilters = filterGroup;
実行結果

サンプル
関連ドキュメント
- クロス フィールド レコード フィルタリング (xamDataGrid)