データフィルタリング
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
});
実行結果 — 上の述語を 7 行の表に適用したもの。1000 未満の行が非表示になるため行番号が飛んでいます。UsedRange は見出し行も含み、見出し行も述語を満たさないので一緒に隠れます。見出しを残したい場合は範囲を 2 行目から取ってください。
データフィルターの使用
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の構築
コントロール(パネル、リスト、チェックボックスなど)を好きな場所にレンダリングします。多くの場合、ヘッダーのドロップダウン内に配置します。
ユーザーが選択を変更したら、フィルターオブジェクトを更新して Apply() を呼び出し、OnApply で Worksheet.DoFilter(range, filter) を呼び出します。
ヘッダーのドロップダウンの場合、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>>サブフィルターのリスト
詳細