バージョン 20.1 (最新)

XamDataGrid のフィルタリング

このトピックでは、XamDataGrid コントロールによって実装できるフィルタリング動作を分かりやすく説明し、簡単に理解できるようにします。

前提条件

本トピックの理解を深めるために、以下のトピックを参照することをお勧めします。

トピック 目的

このトピックでは、XamDataGrid コントロールをビューに追加してサンプルデータを生成するための基本的な手順を紹介します。

このリソース トピックは、 XamDataGrid コントロールのデータソースを使用したサンプル データの実装を提供します。

フィルタリング動作の概要

XamDataGrid コントロールを使用すると、レコードにフィルタリングを適用して、特定の条件に基づき表示するレコードを減らすことができます。XamDataGrid コントロールを使用したレコードのフィルタリングでは、 FilterFactory クラスを使用して、カスタム フィルター式を構築します。この式は、単一で使用することも、式をひとつのチェーンにして複数の式を使用することもできます。

フィルタリングは、ローカルおよびリモートのデータ ソースに実装できます。詳細については、以下のトピックを参照してください。

次の手順では、フィルタリングを実装する方法を紹介します。

  1. FilterFactory クラスのインスタンスを作成します。

  2. ColumnPropertyPathFilterFactory インスタンスでフィルタリングされるように割り当てます。これには、キーを Property プロパティに渡し、FilterFactory オブジェクトから公開します。

  3. フィルター条件を FilterFactory インスタンスに割り当てます。これには、Property プロパティから公開されている条件拡張メソッドの 1 つにアクセスし、フィルタリングに使用する値を渡します。

  4. FilterFactory 式全体を XamDataGrid コントロールの FilterExpressionCollection コレクションに追加します。

フィルタリングの要件

XamDataGrid コントロールは、 FilterFactory クラスを使用して構築されたフィルター式を受け入れます。このクラスの基本式は、フィルタリングされるターゲット フィールド(フィルタリングされた ColumnPropertyPath として、 Property に渡される)とフィルター演算子のメソッド(条件付きの値に関連付けられている)という 2 つの基本的なコンポーネントに分けることができます。

FilterFactory クラスは広範囲なフィルター条件をサポートします。これには、基本的な論理演算子である and、or、not、contains、greaterThan などが含まれています(これらの演算子の完全なリストについては、 FilterFactory API を参照してください)。これらの演算子は、拡張メソッドにより適用され、 Property API メンバーの直後に追加されます。これらの演算子の拡張メソッドは、フィルタリングに使用される値で構成された単一のパラメーターを受け入れます。

単一の列のレコードのフィルタリング

次の例では、XamDataGrid コントロールを使用して、基本的なフィルタリング式を実装する方法を示します。このシナリオでは、Territory Column のレコードがフィルタリングされるため、国の「Bulgaria」を含むレコードのみが表示されます。

この例では、「XamDataGrid を使用した作業の開始」のトピックの SampleGridApp を使用しています。

  1. 次に示すコードのように、FilterFactory インターフェイスへの参照を作成します。

C# の場合:

var Filter = Infragistics.Core.Controls.DataSource.FilterFactory.Instance;
  1. FilterFactory インスタンスにターゲット フィールドとフィルター式を割り当て、式全体を FilterExpressionsAdd() メソッドに渡します。

FilterFactory インスタンスの Property プロパティにアクセスします。ターゲット フィールドを設定し、フィルタリングする ColumnPropertyPath として渡します。

フィルター式のメソッドは、Property() メソッドからアクセスされ、フィルターに使用される値は、そのパラメーターとして渡されます。

この場合、isEqualTo 式のメソッドを使用するため、フィルタリングされるコンテンツは、Territory の「Bulgaria」のレコードが含まれたコンテンツのみになります。

C# の場合:

DataGrid.FilterExpressions.Add(Filter.Property("Territory").IsEqualTo("Bulgaria"));
  1. 結果を確認するために、SampleGridApp を保存し実行します。

次のスクリーンショットに示すように、XamDataGrid コントロールがそのレコードをフィルタリングするため、Territory がブルガリアのレコードのみが表示されます。

Filtering with DataGridView 1.png

複数の列のレコードのフィルタリング

XamDataGrid コントロールは、複数のフィルター式と FilterFactory インスタンスに適用された条件をサポートします。これは、式を同時に変更することによって可能になるため、複数の Column および値を同時にフィルタリングする複合フィルター条件を使用できます。

次の例では、複数フィルター式の使用方法を示します。このシナリオでは、「Bulgaria」または「Japan」が Territory に割り当てられたすべての従業員と、セールスの値が「10000」および「20000」の範囲内の従業員すべてがフィルタリングされたレコードに表示されます。

  1. 少なくとも 1000 データ項目を持つ XamDataGrid コントロールのデータソースを変更します。これによって複雑なフィルター条件を適用した場合もデータセットから十分な数の結果を得ることができます。

C# の場合:

var DataGrid = new XamDataGrid();
DataGrid.ItemsSource = SampleSalesPerson.GenerateSalesData(1000);
  1. 次のコードのように、 FilterFactory インターフェイスへの参照を作成します。

C# の場合:

var Filter = Infragistics.Core.Controls.DataSource.FilterFactory.Instance;
  1. XamDataGrid コントロールの FilterExpressions() プロパティにアクセスし、対応する Add メソッドを使用して、チェーン フィルター式をパラメーターとして渡します。

Add メソッド内で、FilterFactory インスタンスを渡します。その Property メソッドを使用して、Territory Columnをターゲットにします。この場合、「Territory」キーをパラメーターとして渡し、次に isEqualTo 拡張メソッドにアクセスして文字列値「Bulgaria」を渡します。

前述の式から Or メソッドにアクセスして、最初の式に OR 条件を追加し、そのパラメーターとして FilterFactory インスタンスを渡します。今回は、Territory Column をターゲットにして、isEqualTo 拡張メソッドにアクセスし文字値「Japan」を渡します。

前述の式に Add メソッドを追加し、 FilterFactory インスタンスを渡します。その Property メソッドにアクセスして、Sales Column をターゲットにします。この場合、「Sales」キーを Property メソッドのパラメーターとして渡し、次に IsGreaterThanOrEqualTo 拡張メソッドにアクセスして XamDataGrid の値をパラメーターとして渡します。

最後に、前述の式に Add メソッドを追加し、 FilterFactory インスタンスを渡します。その Property メソッドにアクセスして、Sales Column を再度ターゲットにします。この場合、「Sales」キーをパラメーターとして渡し、次に IsLessThanOrEqualTo 拡張メソッドにアクセスしてパラメーターの値「20000」を渡します。

C# の場合:

DataGrid.FilterExpressions.Add(Filter.Property("Territory").IsEqualTo("Bulgaria")
    .Or(Filter.Property("Territory").IsEqualTo("Japan"))
    .And(Filter.Property("Sales").IsGreaterThanOrEqualTo(10000))
    .And(Filter.Property("Sales").IsLessThanOrEqualTo(20000)));
  1. 結果を確認するために、SampleGridApp を保存し実行します。次のスクリーンショットに示すように、XamDataGrid コントロールがそのレコードをフィルタリングするため、Territory Column に Japan と Bulgaria が含まれ、セールス値が 10000 から 20000 の範囲の従業員のみが UI に表示されます。

Filtering with DataGridView 2.png

関連トピック

以下の表は、このトピックに関連するトピックを示します。

トピック 目的

このトピックでは、XamDataGrid コントロールでサポートされる列タイプの情報を提供します。

このトピックでは、XamDataGrid コントロールで列を使用する際のコード例を提供します。

このトピックは、XamDataGrid コントロールの並べ替え動作に関する情報とコード例を提供します。