True DBGrid for WinForms
フィルタ

Filtering in True DBGrid lets you narrow down display records according to a specified condition applied on a column. It is useful in case of big data sets as it lets you easily analyze data by displaying specific type of records only.

特定のフィールドに表示されるアイテムの数を制限するように、基礎レコードセットをフィルタするとします。C1TrueDBGrid では、2つの簡単な手順でこれを実行できます。FilterBar プロパティとAllowFilter プロパティを使用し、適切なフィルタテキストを適切に入力するだけで、ほとんど手間もなくフィールドエントリの数を減らすことができます。

TrueDBGrid コントロールの FilterBar プロパティを設定すると、グリッドの最初のデータ行のすぐ上に、灰色の分割線で区切られた空の行が表示されます。

グリッドにフィルタを実装するために、AllowFilter プロパティを True (デフォルト)に設定します。これにより、グリッドにフィルタ処理を実装できます。FilterBar プロパティと AllowFilter プロパティの両方を True に設定すると、グリッドにフィルタバーが表示され、DataSet が自動的に処理されます。

手作業によるデータのフィルタリング

フィルタ処理を自分で行う場合は、AllowFilter プロパティを False のままにして、グリッドの自動フィルタを実装しません。フィルタを作成するには、AllowFilter イベントを使用して、手作業でデータをソートする必要があります。このイベントは、ユーザーがフィルタバーの状態を変更すると発生します。

このイベントでは、ユーザーが入力した文字に基づいてデータセットをフィルタするハンドラを作成する必要があります。たとえば、ユーザーがフィルタバーのセルに "B" と入力した場合は、値が文字 B で始まる列アイテムだけに基礎データセットを制限する必要があります。ユーザーがフィルタの文字を増やして "BR" にした場合は、BR で始まる値だけに列アイテムを減らす必要があります。

フィルタバーに入力促進文字列を追加する

フィルタバーに入力促進文字列を追加し、デフォルトテキストとともに簡単に表示できます。この入力促進文字列を使ってテキストのフィルタリングやデフォルト値を追加するための指示を表示し、特定のフィルタバーのセルに入力できる値をユーザーに理解してもらうことなどできます。フィルタバーにテキストを表示するには、FilterWatermark プロパティに文字列を設定するだけです。

たとえば次のコードで、最初のフィルタバーのセルの FilterWatermark にFilter Meを設定します。

C#
コードのコピー
// 最初列のC1DataColumn.FilterWatermarkプロパティを設定します。
this.c1TrueDBGrid1.Columns[0].FilterWatermark = "Filter Me";

Notice that the background color of the filter bar cell with a watermark has changed:

次のコードでは、FilterWatermark は各列のキャプションのテキスト値に設定されます。

C#
コードのコピー
int colcount;
colcount = 0;
while (c1TrueDBGrid1.Columns.Count > colcount)
{
    // 各列のC1DataColumn.FilterWatermarkプロパティをそのキャプションに設定します。
    this.c1TrueDBGrid1.Columns[colcount].FilterWatermark = c1TrueDBGrid1.Columns[colcount].Caption;
    colcount = colcount + 1;
}

グリッドは、次のようになります。

テキストがフィルタリングされると、入力促進文字列は見えなくなるのが分かります。

FilterWatermark のスタイルの外観を変更するには、FilterWatermarkStyle プロパティを使用します。スタイルについての詳細は、スタイルの使用方法を参照してください。

複数の条件によるグリッドのフィルタリング

実行時に、複数のフィルタ条件を使用してグリッドをフィルタできるようになりました。たとえば、文字 A または文字 B で始まる項目だけがグリッドに表示されるグリッドをフィルタできます(フィルタをどちらか1つの条件に限る必要はありません)。必要な手順は、FilterMultiSelect プロパティを True に設定し、テキストをフィルタバーに表示するだけです。

たとえば以下のコードでは、最初のフィルタバーセルのFilterMultiSelect プロパティが True に設定されます。

C#
コードのコピー
// フィルタバーを表示します。
this.c1TrueDBGrid1.FilterBar = true;
// 最初の列を複数の項目でフィルタできるようにします。
this.c1TrueDBGrid1.Columns[0].FilterMultiSelect = true;

アプリケーションを実行すると、最初のセルを複数の条件でフィルタできることがわかります。たとえば、フィルタバーに「a,b」と入力して、文字 A と文字 B で始まる項目が表示されることを確認します。FilterSeparator プロパティを設定し、別個のフィルタ項目に使用する文字をカスタマイズできます。

フィルタドロップダウンリストの追加

フィルタバーに加え、フィルタバーにフィルタドロップダウンリストを組み込むこともできます。ドロップダウンリストには、その列にあるすべての項目が一覧表示されるので、ユーザーは値を入力することなく、列をフィルタする項目を簡単に選択できます。

たとえば以下のコードでは、2番目のフィルタバーセルの FilterDropDown プロパティが True に設定されます。

C#
コードのコピー
// フィルターバーを表示します。
this.c1TrueDBGrid1.FilterBar = true;
// 最初列を複数のアイテムでフィルタリングできるようにします。
this.c1TrueDBGrid1.Columns[1].FilterDropDown  = true;
// 最初列を複数のアイテムでフィルタリングできるようにします。
this.c1TrueDBGrid1.Columns[1].FilterMultiSelect = true;

アプリケーションを実行すると、フィルタドロップダウンリストを選択して、列をフィルタする項目を指定できることがわかります。

チェックボックスをクリックして、表示する項目を指定します。チェックされた項目が表示され、チェックボックスがクリアされた項目は表示されません。フィルタ条件を適用するには、フィルタバーの適用ボタンをクリックします。フィルタをクリアするには、クリアボタンをクリックします。ドロップダウンリストを閉じるには、閉じるボタンをクリックします。

カスタムフィルタ

コードでFilterDefinition プロパティを使用し、独自のフィルタ方法を作成して、カスタムフィルタを保存/ロードできます。次のように、xml ファイルから FilterDefinition プロパティを読み込んで、いくつかある定義済みフィルタの1つを適用できます

C#
コードのコピー
void ReadFilter(string name)
{
    c1TrueDBGrid1.Splits[0].FilterDefinition = System.IO.File.ReadAllText(name + ".xml");
}

その後、カスタムフィルタをグリッドに適用し、次のようにカスタムとして保存できます。

C#
コードのコピー
private void btnSave_Click(object sender, EventArgs e)
{
    SaveCustomFilter();
}
    メモ: この FilterDefinition プロパティを使用した完全なサンプルについては、ComponentOne for Winforms と共にインストールされた FilterDefinitionTdbg サンプルを参照してください。