ReoGrid
DOCUMENT
Built-in Auto Filter

ReoGrid ships an Excel-like column filter. It builds a drop-down per column, collects the unique values from that column, and lets users show/hide rows or sort the data.

Create column filters

Use Worksheet.CreateColumnFilter to attach the built-in UI to one or more columns. The filter scans the range you supply (excluding title rows) to build its candidate list.

// 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);

Common overloads:

  • CreateColumnFilter() – cover the current used range.
  • CreateColumnFilter(string startColumn, string endColumn, int titleRows = 0, AutoColumnFilterUI ui = AutoColumnFilterUI.DropdownButtonAndPanel)
  • CreateColumnFilter(RangePosition range, AutoColumnFilterUI ui = AutoColumnFilterUI.DropdownButtonAndPanel)

By default a drop-down button is added on each column header: 143

Click it to see the candidate list (collected from DisplayText): 144

To create the filter without UI, pass AutoColumnFilterUI.NoGUI:

var filter = worksheet.CreateColumnFilter("C", "C", 0, AutoColumnFilterUI.NoGUI);

With NoGUI, you control the candidates entirely in code—add or remove SelectedTextItems per column and call Apply() when your conditions change.

WPF: Custom templates

When using the WPF build you can style the built-in UI with DataTemplates:

  • AutoColumnFilter.FilterButtonTemplate – template for the drop-down button shown on the column header (propagates to each AutoColumnFilterBody.DropdownButtonTemplate).
  • AutoColumnFilter.FilterPopupItemTemplate – template for each item in the filter popup list (defaults to a checkbox + text). Bind to ColumnFilterPopupItem properties like Text and IsChecked.
  • DropdownHeaderCell.DropdownButtonTemplate (on a specific column filter body) – per-column override if you need different buttons per column.

Example:

<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");

Programmatic filtering

You can control which items are selected in code:

filter.Columns["C"].SelectedTextItems.Clear();
filter.Columns["C"].SelectedTextItems.AddRange(new[] { "A", "C", "D" });
filter.Apply();

Sorting

Use Worksheet.SortColumn to sort a column. The sort moves other columns inside the apply range in sync.

// sort on column "C"
worksheet.SortColumn("C", order: SortOrder.Descending);

You can also limit the area the sort is allowed to move:

worksheet.SortColumn(
    columnIndex: 1,                         // column B (zero-based)
    applyRange: new RangePosition("A1:B5"),
    order: SortOrder.Descending);

Result: 152

Create filters in ReoGrid Editor

In the Editor app, select the data range (excluding title rows) and choose Sheet → Filter to add drop-down buttons. Example setup:

worksheet["C1:C6"] = new object[] { "Title", "A", "B", "C", "D", "E" };

Title rows are excluded from filtering/sorting: 148

Example sort (Z‑A): 149

Title rows stay in place: 151


Was the content of the page helpful?

© 2012-2025UNVELL Inc.