Skip to main content

ColumnView.CustomRowFilter Event

Allows you to hide/show specific rows (that exist in the data source) based on a condition regardless of the grid’s filter.

Namespace: DevExpress.XtraGrid.Views.Base

Assembly: DevExpress.XtraGrid.v24.1.dll

NuGet Packages: DevExpress.Win.Grid, DevExpress.Win.Navigation


public event RowFilterEventHandler CustomRowFilter

Event Data

The CustomRowFilter event's data class is RowFilterEventArgs. The following properties provide information specific to this event:

Property Description
Handled Gets or sets whether the event is handled and therefore no default processing is required.
ListSourceRow Gets the index in the data source of the row currently being processed. Row handles are not data source indexes, see the Accessing Rows in Code. Row Handles section of the “Rows” article for more information.
Visible Gets or sets whether the current record must be visible in a View.


By default, the grid displays all rows/records from its data source that match the filter criteria specified by a View (filter criteria are specified by GridColumn.FilterInfo properties of grid columns). Rows that do not match filter criteria are not displayed in the View.

The CustomRowFilter event allows you to hide/show specific rows based on a specific condition (ignoring filter criteria applied to columns).

The CustomRowFilter event fires for each record in the data source. The e.ListSourceRow parameter identifies the processed record by its zero-based index.

The the e.Visible parameter specifies whether to show or hide the row.

Set the e.Handled parameter to true to handle the event and cancel default processing. If the e.Handled parameter is set to false, the row’s visibility is determined by the View’s filter.


The CustomRowFilter event is not supported in Server and Instant Feedback Modes.


The Grid control silently swallow exceptions that are raised within the CustomRowFilter event handler (if any). The Grid control stops filtering rows and hides all subsequent rows. Enclose the code in the CustomRowFilter event handler with the try…catch block to catch and re-throw an exception.


If you need to get or set cell values while handling the CustomRowFilter event, use methods of the bound data source. The event’s e.ListSourceRowIndex parameter identifies the processed record. To get record values, use the ColumnView.GetListSourceRowCellValue method or methods of data objects. DO NOT use APIs of the Grid Control that have the rowHandle parameter (for example, ColumnView.GetRowCellValue).

Example 1: Keep Specific Rows Always Visible

The following code shows how to make the rows that contain the “USA” value in the ‘Country’ field always visible regardless of the filter applied to a View. The ColumnView.CustomRowFilter event is handled to control the visibility of the rows.

using DevExpress.XtraGrid.Views.Base;

private void gridView1_CustomRowFilter(object sender, RowFilterEventArgs e) {
    ColumnView view = sender as ColumnView;
    string country = view.GetListSourceRowCellValue(e.ListSourceRow, "Country").ToString();
    // Check whether the current row contains "USA" in the "Country" field.
    if (country == "USA") {
        // Make the current row visible.
        e.Visible = true;
        // Prevent default processing, so the row will be visible 
        // regardless of the view's filter.
        e.Handled = true;

Example 2: Hide Specific Rows Based on a Condition

The following example hides the first row in a data source. The example handles the CustomRowFilter event and sets the e.Visible property to false:

void gridView1_CustomRowFilter(object sender, RowFilterEventArgs e) {    
    if (e.ListSourceRow == 0) {
        e.Visible = false;
        e.Handled = true;

Example 3: Toggle Row Visibility

The following GitHub example implements a RowVisibilityHelper helper class. Its ShowRow and HideRow methods allow you to hide/show the specified data row:

View Example: Toggle Row Visibility

The following code snippet (auto-collected from DevExpress Examples) contains a reference to the CustomRowFilter event.


The algorithm used to collect these code examples remains a work in progress. Accordingly, the links and snippets below may produce inaccurate results. If you encounter an issue with code examples below, please use the feedback form on this page to report the issue.

See Also