データフィルタリング

データフィルタリング

ReoGridはデータ範囲に対してフィルターを実行して行を非表示にします。組み込みの列フィルターUI、ルールベースの条件付きフィルター、または任意のGUIに接続した独自のフィルターロジックを使用できます。

フィルターのエントリポイント

  • オートフィルターUI – 列ごとにユニークな値を収集するExcelスタイルのドロップダウンです。組み込みオートフィルターを参照してください。
  • 条件付きフィルターColumnBasedDataSource に対して評価されるルールオブジェクト(ConditionalDataFilter + FilterCondition)です。条件付きフィルターを参照してください。
  • カスタムフィルターRowBasedDataFilter<IRowDataRecord> を実装するか(または Func<int, bool> を使用して)、Worksheet.DoFilter(range, filter) を自分で呼び出します。

最小限の例

述語の使用

var sheet = grid.CurrentWorksheet;
var range = sheet.UsedRange;
sheet.DoFilter(range, rowIndex =>
{
    var value = sheet[rowIndex, 2];            // third column
    return value is double d && d >= 1000;     // keep rows with value >= 1000
});

データフィルターの使用

var condition = new ConditionalDataFilter();
condition.Conditions.Add(new FilterCondition("price", ConditionOperator.GreaterThan, 1000));
condition.OnApply += (s, e) => sheet.DoFilter("A1:D200", condition);
condition.Apply(); // triggers DoFilter

フィルターの組み合わせ

複数のフィルターを同時に適用したい場合(例えば、条件付きルールとフリーテキスト検索の組み合わせ)、MultipleDataFilter を使用します:

var condition = new ConditionalDataFilter();
var search = new TextSearchDataFilter();
var filters = new MultipleDataFilter();
filters.Filters.Add(condition);
filters.Filters.Add(search);

condition.OnApply += (s, e) => sheet.DoFilter("A1:F300", filters);
search.OnApply += (s, e) => sheet.DoFilter("A1:F300", filters);

画面上フィルタリングとデータ駆動フィルタリング

  • 画面上フィルター(UI駆動): 組み込みのオートフィルターと条件付きフィルターは、シート上に既に存在する行を非表示にします。ワークシートに現在読み込まれている範囲に対して動作します。
  • データ駆動フィルター: データソースがフィルタリング/クエリをサポートしている場合、まずそこでフィルタリングし(例:データベースクエリ、メモリ内LINQ)、フィルタリング済みの ColumnBasedDataSource をシートにバインドします。ReoGridはフィルタリングされたレコードのみを表示し、追加の画面上フィルターはその上に適用されます。

独自のフィルターUIの構築

  1. コントロール(パネル、リスト、チェックボックスなど)を好きな場所にレンダリングします。多くの場合、ヘッダーのドロップダウン内に配置します。
  2. ユーザーが選択を変更したら、フィルターオブジェクトを更新して Apply() を呼び出し、OnApplyWorksheet.DoFilter(range, filter) を呼び出します。
  3. ヘッダーのドロップダウンの場合、DropdownHeaderCell を派生させてコントロールをドロップダウンコンテンツとしてアタッチし、列ヘッダーにヘッダーボディをインストールします。

ワークシートフィルターメソッド

CreateColumnFilterのオーバーロード

シグネチャ説明
CreateColumnFilter()使用範囲を自動検出してフィルターを作成
CreateColumnFilter(RangePosition range, AutoColumnFilterUI ui)範囲にフィルターを作成
CreateColumnFilter(string startCol, string endCol, int titleRows, AutoColumnFilterUI ui)列コードで作成
CreateColumnFilter(int column, int titleRows, AutoColumnFilterUI ui)単一列に作成
CreateColumnFilter(int startCol, int endCol, int titleRows, AutoColumnFilterUI ui)列インデックスで作成

DoFilterのオーバーロード

シグネチャ説明
DoFilter(RangePosition range, Func<int, bool> filter)述語を使用してフィルタリング(行インデックス → 保持するか?)
DoFilter(string addressOrRange, RowBasedDataFilter<IRowDataRecord> filter)アドレスでデータフィルターを使用してフィルタリング
DoFilter(RangePosition range, RowBasedDataFilter<IRowDataRecord> filter)範囲でデータフィルターを使用してフィルタリング

SortColumn

シグネチャ説明
SortColumn(string columnCode, SortOrder order)列アドレスコードでソート
SortColumn(int columnIndex, RangePosition applyRange, SortOrder order)特定の範囲内でソート

SortOrder列挙型

説明
AscendingA→Z / 小さい順にソート
DescendingZ→A / 大きい順にソート

イベント

イベント説明
RowsFilteredワークシートで行がフィルタリングされた後に発生
sheet.RowsFiltered += (s, e) =>
{
    Console.WriteLine("Rows have been filtered");
};

フィルタークラス

RowBasedDataFilter<T>(抽象基底クラス)

メンバー説明
InputSourceIDataSource<T>フィルタリング対象のデータソース
IsDisabledboolフィルターの有効/無効を切り替え
Apply()voidフィルターを適用(OnApply を発生)
OnApplyeventフィルターが適用されたときに発生
BeginFilter(Worksheet, ColumnBasedDataSource)abstractフィルタリング開始前に呼び出される
FilterRecord(T record)abstract bool行を保持する場合は true を返す
EndFilter()abstractフィルタリング終了後に呼び出される

TextSearchDataFilter

検索文字列を含む行をフィルタリングします(大文字小文字を区別しない、全列を検索)。

プロパティ説明
Textstring検索するテキスト
var search = new TextSearchDataFilter();
search.Text = "hello";
search.OnApply += (s, e) => sheet.DoFilter(range, search);
search.Apply();

MultipleDataFilter

複数のフィルターを結合します。行が表示されるには、すべてのサブフィルターを通過する必要があります。

プロパティ説明
FiltersList<RowBasedDataFilter<IRowDataRecord>>サブフィルターのリスト

詳細


ページの内容は役に立ちましたか?