---
product: "AG Grid"
title: "Column Filters"
description: "Column Filters are applied to the Vue table data at the column level. Use one of the provided column filters or define a custom column filter."
framework: vue
version: "36.2.0"
related:
    - title: "Overview"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filtering-overview/"
    - title: "Custom Column Filters"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/component-filter/"
    - title: "Floating Filters"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/floating-filters/"
    - title: "Custom Floating Filters"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/component-floating-filter/"
    - title: "Advanced Filter"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-advanced/"
    - title: "External Filter"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-external/"
    - title: "Quick Filter"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-quick/"
llms: "https://www.ag-grid.com/archive/36.2.0/llms.txt"
---

# Column Filters

Column Filters are filters that are applied to the data at the column level. Many Column Filters can be active at once (e.g. filters set on different columns) and the grid will display rows that pass every column's filter.

Column Filters are accessed in the grid UI either through the [Column Menu](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/column-menu/) or the [Tool Panel](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/tool-panel/).

[Video](https://www.ag-grid.com/archive/36.2.0/_astro/column-filters.8Zrvp1AA.mp4)

## Column Filter Types

You can use the Provided Filters that come with the grid, or you can build your own [Filter Components](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/component-filter/) if you want to customise the filter experience to your application.

There are five main Provided Filters, plus the Multi Filter. These are as follows:

- [Text Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-text/) - A filter for string comparisons.
- [Number Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-number/) - A filter for number comparisons.
- [BigInt Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-bigint/) - A filter for `bigint` comparisons.
- [Date Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-date/) - A filter for date comparisons.
- [Set Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-set/)  (Enterprise) - A filter influenced by how filters work in Microsoft Excel.
- [Multi Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-multi/)  (Enterprise) - Allows for two filters to be used together (either one of the above Provided Filters or a Custom Filter Component).

## Example: Provided Filters

The example below demonstrates the Text, Number, Date and Set Filters, plus the Multi Filter:

- Column **Athlete** has a Text Filter.
- Column **Age** has a Number Filter.
- Column **Date** has a Date Filter.
- Column **Country** has a Set Filter.
- Column **Sport** has a Multi Filter (consisting of a Text Filter and a Set Filter).

#### Provided Filters

```ts
import {
  createApp,
  defineComponent,
  onBeforeMount,
  ref,
  shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import {
  ClientSideRowModelModule,
  ColDef,
  ColGroupDef,
  DateFilterModule,
  GridApi,
  GridOptions,
  GridReadyEvent,
  IDateFilterParams,
  ModuleRegistry,
  NumberFilterModule,
  RowApiModule,
  TextFilterModule,
  enableDevValidations,
} from "ag-grid-community";
import {
  ColumnMenuModule,
  ContextMenuModule,
  MultiFilterModule,
  SetFilterModule,
} from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";

if (process.env.NODE_ENV !== "production") {
  // Enable extended validations only for development
  enableDevValidations();
}

ModuleRegistry.registerModules([
  ClientSideRowModelModule,
  ColumnMenuModule,
  ContextMenuModule,
  MultiFilterModule,
  SetFilterModule,
  TextFilterModule,
  NumberFilterModule,
  DateFilterModule,
  RowApiModule,
]);

const filterParams: IDateFilterParams = {
  comparator: (filterLocalDateAtMidnight: Date, cellValue: string) => {
    const dateAsString = cellValue;
    if (dateAsString == null) return -1;
    const dateParts = dateAsString.split("/");
    const cellDate = new Date(
      Number(dateParts[2]),
      Number(dateParts[1]) - 1,
      Number(dateParts[0]),
    );
    if (filterLocalDateAtMidnight.getTime() === cellDate.getTime()) {
      return 0;
    }
    if (cellDate < filterLocalDateAtMidnight) {
      return -1;
    }
    if (cellDate > filterLocalDateAtMidnight) {
      return 1;
    }
    return 0;
  },
};

const VueExample = defineComponent({
  template: `
        <div style="height: 100%">
                <ag-grid-vue
      style="width: 100%; height: 100%;"
      @grid-ready="onGridReady"
      :columnDefs="columnDefs"
      :defaultColDef="defaultColDef"
      :rowData="rowData"></ag-grid-vue>
        </div>
    `,
  components: {
    "ag-grid-vue": AgGridVue,
  },
  setup(props) {
    const gridApi = shallowRef<GridApi<IOlympicData> | null>(null);
    const columnDefs = ref<ColDef[]>([
      { field: "athlete" },
      { field: "age", filter: "agNumberColumnFilter", maxWidth: 100 },
      {
        field: "date",
        filter: "agDateColumnFilter",
        filterParams: filterParams,
      },
      { field: "country", filter: "agSetColumnFilter" },
      { field: "sport", filter: "agMultiColumnFilter" },
      { field: "gold", filter: "agNumberColumnFilter" },
      { field: "silver", filter: "agNumberColumnFilter" },
      { field: "bronze", filter: "agNumberColumnFilter" },
      { field: "total", filter: false },
    ]);
    const defaultColDef = ref<ColDef>({
      flex: 1,
      minWidth: 150,
      filter: "agTextColumnFilter",
      suppressHeaderMenuButton: true,
      suppressHeaderContextMenu: true,
    });
    const rowData = ref<IOlympicData[]>(null);

    const onGridReady = (params: GridReadyEvent) => {
      gridApi.value = params.api;

      const updateData = (data) => (rowData.value = data);

      fetch("https://www.ag-grid.com/example-assets/olympic-winners.json")
        .then((resp) => resp.json())
        .then((data) => updateData(data));
    };

    return {
      gridApi,
      columnDefs,
      defaultColDef,
      rowData,
      onGridReady,
    };
  },
});

const app = createApp(VueExample);
app.mount("#app");
```

[Live example: Provided Filters](https://www.ag-grid.com/archive/36.2.0/examples/filtering/provided-filters/vue3/)

## Relation to Quick Filter and External Filter

Column Filters work independently of [Quick Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-quick/) and [External Filter](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/filter-external/). If Quick Filter and / or an external filter are applied along with a Column Filter, each filter type is considered and the row will only show if it passes all three types.

Column Filters are tied to a specific column. Quick Filter and external filter are not tied to any particular column. This section of the documentation talks about Column Filters only. For Quick Filter and external filter, click the links above to learn more.
