ReoGridにはExcelのような列フィルターが含まれています。列ごとにドロップダウンを構築し、その列からユニークな値を収集して、ユーザーが行の表示/非表示やデータの並べ替えを行えるようにします。
列フィルターの作成
Worksheet.CreateColumnFilter を使用して、1つまたは複数の列に組み込みUIをアタッチします。フィルターは指定した範囲(タイトル行を除く)をスキャンして候補リストを構築します。
// put data on the sheet
worksheet["C1:C5"] = new object[] { "A", "B", "C", "D", "E" };
// create a filter on column C, no title rows
var filter = worksheet.CreateColumnFilter("C", "C", titleRows: 0);
一般的なオーバーロード:
CreateColumnFilter()– 現在の使用範囲をカバーします。CreateColumnFilter(string startColumn, string endColumn, int titleRows = 0, AutoColumnFilterUI ui = AutoColumnFilterUI.DropdownButtonAndPanel)CreateColumnFilter(RangePosition range, AutoColumnFilterUI ui = AutoColumnFilterUI.DropdownButtonAndPanel)
デフォルトでは、各列ヘッダーにドロップダウンボタンが追加されます:
クリックすると候補リスト(DisplayText から収集)が表示されます:
UIなしでフィルターを作成するには、AutoColumnFilterUI.NoGUI を渡します:
var filter = worksheet.CreateColumnFilter("C", "C", 0, AutoColumnFilterUI.NoGUI);
NoGUI の場合、候補をすべてコードで制御します。列ごとに SelectedTextItems を追加または削除し、条件が変更されたときに Apply() を呼び出します。
WPF:カスタムテンプレート
WPFビルドを使用する場合、DataTemplate で組み込みUIをスタイル設定できます:
AutoColumnFilter.FilterButtonTemplate– 列ヘッダーに表示されるドロップダウンボタンのテンプレート(各AutoColumnFilterBody.DropdownButtonTemplateに伝播されます)。AutoColumnFilter.FilterPopupItemTemplate– フィルターポップアップリストの各項目のテンプレート(デフォルトはチェックボックス + テキスト)。ColumnFilterPopupItemのTextやIsCheckedなどのプロパティにバインドします。DropdownHeaderCell.DropdownButtonTemplate(特定の列フィルターボディ上) – 列ごとに異なるボタンが必要な場合のオーバーライド。
例:
<DataTemplate x:Key="FilterButtonTemplate">
<Grid Width="16" Height="16">
<Path Data="M0,0 L8,8 L16,0 Z" Fill="DarkSlateGray"/>
</Grid>
</DataTemplate>
<DataTemplate x:Key="FilterItemTemplate">
<StackPanel Orientation="Horizontal" Margin="4,2">
<CheckBox IsChecked="{Binding IsChecked}" />
<TextBlock Text="{Binding Text}" Margin="6,0,0,0"/>
</StackPanel>
</DataTemplate>
var filter = worksheet.CreateColumnFilter("C", "E");
filter.FilterButtonTemplate = (DataTemplate)FindResource("FilterButtonTemplate");
filter.FilterPopupItemTemplate = (DataTemplate)FindResource("FilterItemTemplate");
プログラムによるフィルタリング
コードで選択された項目を制御できます:
filter.Columns["C"].SelectedTextItems.Clear();
filter.Columns["C"].SelectedTextItems.AddRange(new[] { "A", "C", "D" });
filter.Apply();
並べ替え
Worksheet.SortColumn を使用して列を並べ替えます。並べ替えは適用範囲内の他の列も同期して移動させます。
// sort on column "C"
worksheet.SortColumn("C", order: SortOrder.Descending);
並べ替えの移動が許可される範囲を制限することもできます:
worksheet.SortColumn(
columnIndex: 1, // column B (zero-based)
applyRange: new RangePosition("A1:B5"),
order: SortOrder.Descending);
結果:

ReoGridエディタでのフィルター作成
エディタアプリで、データ範囲(タイトル行を除く)を選択し、Sheet → Filter を選択してドロップダウンボタンを追加します。設定例:
worksheet["C1:C6"] = new object[] { "Title", "A", "B", "C", "D", "E" };
タイトル行はフィルタリング/並べ替えから除外されます:
並べ替えの例(Z→A):
タイトル行はそのまま残ります:
APIリファレンス
AutoColumnFilter
| メンバー | 型 | 説明 |
|---|---|---|
Worksheet | Worksheet | アタッチされたワークシート |
ApplyRange | RangePosition | フィルタリング対象の範囲 |
Columns | FilterColumnCollection | インデックスまたは列コードで列フィルターボディにアクセス |
Apply() | void | フィルターを再評価して行の表示/非表示を切り替え |
Attach(Worksheet, AutoColumnFilterUI) | void | ワークシートにフィルターをアタッチ |
Detach() | void | ワークシートからフィルターを削除 |
FilterButtonPressed | event | 列フィルターボタンがクリックされたときに発生 |
FilterColumnCollection
| メンバー | 説明 |
|---|---|
this[int index] | ゼロベースの列インデックスで列フィルターボディを取得 |
this[string columnCode] | 列アドレスコード(例:"C")で列フィルターボディを取得 |
AutoColumnFilterBody
フィルター内の各列には、以下のメンバーを持つ AutoColumnFilterBody があります:
| メンバー | 型 | 説明 |
|---|---|---|
ColumnHeader | ColumnHeader | 列ヘッダーインスタンス |
IsSelectAll | bool | すべての項目が選択されているかどうか(列がフィルタリングされていない) |
SelectedTextItems | TextFilterCollection | 選択された(表示される)テキスト値のセット |
GetDistinctItems() | List<string> | 列内のすべてのユニークな値を取得 |
TextFilterCollection
| メソッド | 説明 |
|---|---|
Add(string item) | 選択セットに項目を追加 |
AddRange(IEnumerable<string> items) | 複数の項目を追加 |
Remove(string item) | 項目を削除 |
Clear() | 選択された項目をすべてクリア |
Contains(string item) | 項目が選択されているか確認 |
Count | 選択された項目の数 |
this[string item] | 項目が選択されているかどうかを取得または設定 |
AutoColumnFilterUI列挙型
| 値 | 説明 |
|---|---|
NoGUI | UI要素は作成されない |
DropdownButton | ヘッダーにドロップダウンボタンのみを表示 |
DropdownButtonAndPanel | ドロップダウンボタンと組み込みフィルターパネルを表示(デフォルト) |
FilterButtonPressedEventArgs
| プロパティ | 型 | 説明 |
|---|---|---|
ColumnHeader | ColumnHeader | ボタンが押された列ヘッダー |
IsCancelled | bool | true に設定すると組み込みポップアップの表示を防止 |
filter.FilterButtonPressed += (s, e) =>
{
// Show custom filter UI instead of built-in popup
e.IsCancelled = true;
ShowCustomFilterDialog(e.ColumnHeader);
};
関連トピック
- データフィルタリング — フィルターの概念とカスタムフィルター
- 条件付きフィルター — ルールベースのフィルタリング