次の 2 つの方法でグリッドデータのフィルタ処理を実行できます。
ヘッダーベースのフィルタ処理では、列のヘッダーセルにアイコンが表示されます。このアイコンをクリックすると、フィルタを指定するためのオプションがドロップダウンに表示されます。また、特定の列にフィルタが適用されているかどうかも示されます。FlexGrid では、グリッドの AllowFiltering プロパティを使用するだけで、この動作を実行できます。この場合、フィルタのための余分な画面領域は必要ありません。また、この方法では、フィルタエディタを自由にカスタマイズして作成できます。カスタマイズの詳細については、後述のセクションで説明しています。
フィルタ行はフィルタ条件が表示される行で、列ヘッダーの直下に表示されます。この場合、ユーザーは、フィルタ処理された列と現在のフィルタ条件を常に見ることができます。ただし、この長所の半面、フィルタ行のための画面領域が余分に必要になります。FlexGrid では、カスタム実装を使用して、フィルタ行を簡単を追加できます。実装については、「Filter Row(フィルタ行)」という名前の製品サンプルを参照してください。
FlexGrid でフィルタ処理を有効にするには、C1FlexGrid.AllowFiltering プロパティを true に設定します。これで、グリッドのすべての列でデフォルトの ColumnFilter が有効になります。ColumnFilter が有効な場合、ユーザーは実行時に ValueFilter または ConditionFilter を選択できます。
また、各 Column オブジェクトの AllowFiltering プロパティを設定することで、各列にフィルタタイプを指定することもできます。 Column の AllowFiltering プロパティには、次のいずれかの値を選択できます。
値 | 説明 |
---|---|
Default | ValueFilter と ConditionFilter を組み合わせた ColumnFilter が有効になります。ユーザーは、実行時にいずれかを選択できます。 |
ByValue | その列に含まれる値のチェックボックスリストを含む ValueFilter が有効になります。 ユーザーは、それらのチェックボックスをオフにして、フィルタ後の出力に表示しない値を指定できます。 |
ByCondition | 「equals」、「greater than」、「contains」などから 2 つの条件を組み合わせて指定できる ConditionFilter が有効になります。条件を組み合わせるには、「And」または「Or」の演算子を使用します。 |
Custom | カスタムフィルタをインスタンス化し、それを列の Filter プロパティに明示的に割り当てることができます。 |
None | 列のフィルタを無効にします。 |
WinForms FlexGrid の最初の列で条件フィルタを有効にするには、次のコードスニペットを使用します。
前述のフィルタタイプの詳細については、「フィルタのタイプ」を参照してください。
グリッドの AllowFiltering プロパティを指定すると、グリッドのフィルタ処理が有効になります。このプロパティは多くの一般的なシナリオで使用できますが、フィルタオプションの調整がさらに必要な場合もあります。それには、各列の AllowFiltering プロパティと Filter プロパティを変更します。 たとえば、次のコードは、WinForms FlexGrid のフィルタ処理を文字列型の列に制限して有効にしています。
さらに、フィルタを作成して列に割り当てたり、既存のフィルタを取得してそのプロパティを変更することで、フィルタ処理をカスタマイズすることもできます。たとえば、次のコードでは、WinForms FlexGrid に ConditionFilter を作成して、「Germany」に一致するすべての項目を選択するように設定し、この新しいフィルタを[ShipCountry]列に割り当てています。
FlexGrid にフィルタ処理を適用すると、フィルタ条件を満たさない行は、Visible プロパティが false に設定されて非表示になります。ただし、この動作のカスタマイズが必要な場合もあります。 そのようなシナリオでは、FlexGrid が発生する BeforeFilter イベントと AfterFilter イベントを利用できます。次のサンプルでは、条件を満たさない行を非表示にする代わりに、それらの行に別のスタイルを適用して、WinForms FlexGrid のフィルタ処理動作をカスタマイズしています。
前述のコードでは、「filteredout」というカスタムスタイルを使用しています。これは、次のコードで定義されます。
ユーザーは、各列のフィルタ UI にある[クリア]オプションを使用して、実行時に列フィルタ処理を削除できます。また、グリッド全体のフィルタ処理をプログラムで削除することもできます。それには、FlexGrid の FilterDefinition プロパティに空の文字列を渡します。
次のコードは、WinForms FlexGrid からすべてのフィルタをクリアする方法を示しています。