---
product: "AG Grid"
title: "Row Numbers"
description: "The Row Numbers Feature adds a Column that is always present at the start of the grid where each cell of this column will work as a row header. The following example demonstrates the grid with Row Numbers and no additional configuration."
enterprise: true
framework: vue
version: "36.2.0"
related:
    - title: "Row Data"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-ids/"
    - title: "Row Sorting"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-sorting/"
    - title: "Row Spanning"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-spanning/"
    - title: "Row Pinning"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-pinning/"
    - title: "Row Height"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-height/"
    - title: "Styling Rows"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-styles/"
    - title: "Row Pagination"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-pagination/"
    - title: "Accessing Rows"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/accessing-data/"
    - title: "Row Dragging"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-dragging/"
    - title: "Full Width Rows"
      url: "https://www.ag-grid.com/archive/36.2.0/vue-data-grid/full-width-rows/"
llms: "https://www.ag-grid.com/archive/36.2.0/llms.txt"
---

# Row Numbers

The Row Numbers Feature adds a Column that is always present at the start of the grid where each cell of this column will work as a row header. The following example demonstrates the grid with Row Numbers and no additional configuration.

To enable Row Numbers, set the grid option `rowNumbers = true`.

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `rowNumbers` | `boolean \| RowNumbersOptions` |  |  |  |

```ts
<ag-grid-vue
    :rowNumbers="rowNumbers"
    /* other grid options ... */>
</ag-grid-vue>

this.rowNumbers = true;
```

#### Row Numbers

```ts
import {
  createApp,
  defineComponent,
  onBeforeMount,
  ref,
  shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import {
  ClientSideRowModelModule,
  ColDef,
  ColGroupDef,
  GridApi,
  GridOptions,
  GridReadyEvent,
  ModuleRegistry,
  RowNumbersOptions,
  enableDevValidations,
} from "ag-grid-community";
import { RowNumbersModule } from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";

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

ModuleRegistry.registerModules([ClientSideRowModelModule, RowNumbersModule]);

const VueExample = defineComponent({
  template: `
        <div style="height: 100%">
                <ag-grid-vue
      style="width: 100%; height: 100%;"
      @grid-ready="onGridReady"
      :columnDefs="columnDefs"
      :defaultColDef="defaultColDef"
      :rowNumbers="true"
      :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: "country" },
      { field: "sport" },
      { field: "year" },
      { field: "gold" },
      { field: "silver" },
      { field: "bronze" },
    ]);
    const defaultColDef = ref<ColDef>({
      flex: 1,
      minWidth: 100,
    });
    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: Row Numbers](https://www.ag-grid.com/archive/36.2.0/examples/row-numbers/row-numbers-default/vue3/)

## Cell Selection

When the grid is configured with [Cell Selection](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/cell-selection/), clicking a Row Number will select all the currently visible cells in the row.

```ts
<ag-grid-vue
    :rowNumbers="rowNumbers"
    :cellSelection="cellSelection"
    /* other grid options ... */>
</ag-grid-vue>

this.rowNumbers = true;
this.cellSelection = true;
```

#### Row Numbers with Cell Selection

```ts
import {
  createApp,
  defineComponent,
  onBeforeMount,
  ref,
  shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import {
  CellSelectionOptions,
  ClientSideRowModelModule,
  ColDef,
  ColGroupDef,
  GridApi,
  GridOptions,
  GridReadyEvent,
  ModuleRegistry,
  RowNumbersOptions,
  enableDevValidations,
} from "ag-grid-community";
import { CellSelectionModule, RowNumbersModule } from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";

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

ModuleRegistry.registerModules([
  ClientSideRowModelModule,
  RowNumbersModule,
  CellSelectionModule,
]);

const VueExample = defineComponent({
  template: `
        <div style="height: 100%">
                <ag-grid-vue
      style="width: 100%; height: 100%;"
      @grid-ready="onGridReady"
      :columnDefs="columnDefs"
      :defaultColDef="defaultColDef"
      :cellSelection="true"
      :rowNumbers="true"
      :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: "country" },
      { field: "sport" },
      { field: "year" },
      { field: "gold" },
      { field: "silver" },
      { field: "bronze" },
    ]);
    const defaultColDef = ref<ColDef>({
      flex: 1,
      minWidth: 100,
    });
    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: Row Numbers with Cell Selection](https://www.ag-grid.com/archive/36.2.0/examples/row-numbers/row-numbers-cell-selection/vue3/)

### Suppressing Integration

By default, clicking a row number selects a cell range including all the cells in the row. To prevent this behaviour use the `suppressCellSelectionIntegration` option.

```ts
<ag-grid-vue
    :rowNumbers="rowNumbers"
    :cellSelection="cellSelection"
    /* other grid options ... */>
</ag-grid-vue>

this.rowNumbers = {
    suppressCellSelectionIntegration: true
};
this.cellSelection = true;
```

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `suppressCellSelectionIntegration` | `boolean` |  |  |  |

## Row Resizing

To allow the Row Numbers feature to resize rows, the `enableRowResizer` property can be used.

```ts
<ag-grid-vue
    :rowNumbers="rowNumbers"
    /* other grid options ... */>
</ag-grid-vue>

this.rowNumbers = {
    enableRowResizer: true
};
```

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `enableRowResizer` | `boolean` |  |  |  |

#### Row Numbers Row Resizer

```ts
import {
  createApp,
  defineComponent,
  onBeforeMount,
  ref,
  shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import {
  ClientSideRowModelModule,
  ColDef,
  ColGroupDef,
  GridApi,
  GridOptions,
  GridReadyEvent,
  ModuleRegistry,
  RowNumbersOptions,
  enableDevValidations,
} from "ag-grid-community";
import { RowNumbersModule } from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";

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

ModuleRegistry.registerModules([ClientSideRowModelModule, RowNumbersModule]);

const VueExample = defineComponent({
  template: `
        <div style="height: 100%">
                <ag-grid-vue
      style="width: 100%; height: 100%;"
      @grid-ready="onGridReady"
      :columnDefs="columnDefs"
      :defaultColDef="defaultColDef"
      :rowNumbers="rowNumbers"
      :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: "country" },
      { field: "sport" },
      { field: "year" },
      { field: "gold" },
      { field: "silver" },
      { field: "bronze" },
    ]);
    const defaultColDef = ref<ColDef>({
      flex: 1,
      minWidth: 100,
    });
    const rowNumbers = ref<boolean | RowNumbersOptions>({
      enableRowResizer: 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,
      rowNumbers,
      rowData,
      onGridReady,
    };
  },
});

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

[Live example: Row Numbers Row Resizer](https://www.ag-grid.com/archive/36.2.0/examples/row-numbers/row-numbers-row-resizer/vue3/)

> **Note**
>
> The Row Resizer feature does not work when columns are configured with [Auto Row Height](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/row-height/#auto-row-height).

### Row Resize Events

The following events are fired when a row resize operation starts and ends.

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `rowResizeStarted` | `RowResizeStartedEvent` |  |  |  |
| `rowResizeEnded` | `RowResizeEndedEvent` |  |  |  |

## Value Export

By default, when working with exporters such as [CSV Export](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/csv-export/) or [Excel Export](https://www.ag-grid.com/archive/36.2.0/vue-data-grid/excel-export/), the value of the Row Numbers column is not exported. This behaviour can be changed by toggling the `exportRowNumbers` of the export params.

```ts
<ag-grid-vue
    :rowNumbers="rowNumbers"
    :cellSelection="cellSelection"
    :defaultCsvExportParams="defaultCsvExportParams"
    :defaultExcelExportParams="defaultExcelExportParams"
    /* other grid options ... */>
</ag-grid-vue>

this.rowNumbers = true;
this.cellSelection = {
    enableHeaderHighlight: true,
    handle: { mode: 'fill' },
};
this.defaultCsvExportParams = {
    exportRowNumbers: true,
};
this.defaultExcelExportParams = {
    exportRowNumbers: true,
};
```

### ExportParams

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `exportRowNumbers` | `boolean` |  |  |  |

#### Row Numbers with Export

```ts
import {
  createApp,
  defineComponent,
  onBeforeMount,
  ref,
  shallowRef,
} from "vue";
import { AgGridVue } from "ag-grid-vue3";
import {
  CellSelectionOptions,
  ClientSideRowModelModule,
  ColDef,
  ColGroupDef,
  CsvExportModule,
  CsvExportParams,
  ExcelExportParams,
  GridApi,
  GridOptions,
  GridReadyEvent,
  ModuleRegistry,
  RowNumbersOptions,
  enableDevValidations,
} from "ag-grid-community";
import {
  CellSelectionModule,
  ContextMenuModule,
  ExcelExportModule,
  RowNumbersModule,
} from "ag-grid-enterprise";
import { IOlympicData } from "./interfaces";

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

ModuleRegistry.registerModules([
  ClientSideRowModelModule,
  RowNumbersModule,
  CellSelectionModule,
  ExcelExportModule,
  CsvExportModule,
  ContextMenuModule,
]);

const VueExample = defineComponent({
  template: `
        <div style="height: 100%">
                <ag-grid-vue
      style="width: 100%; height: 100%;"
      @grid-ready="onGridReady"
      :columnDefs="columnDefs"
      :defaultColDef="defaultColDef"
      :rowNumbers="true"
      :defaultCsvExportParams="defaultCsvExportParams"
      :defaultExcelExportParams="defaultExcelExportParams"
      :cellSelection="cellSelection"
      :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: "country" },
      { field: "sport" },
      { field: "year" },
      { field: "gold" },
      { field: "silver" },
      { field: "bronze" },
    ]);
    const defaultColDef = ref<ColDef>({
      flex: 1,
      minWidth: 100,
    });
    const defaultCsvExportParams = ref<CsvExportParams>({
      exportRowNumbers: true,
    });
    const defaultExcelExportParams = ref<ExcelExportParams>({
      exportRowNumbers: true,
    });
    const cellSelection = ref<boolean | CellSelectionOptions>({
      enableHeaderHighlight: true,
      handle: {
        mode: "fill",
      },
    });
    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,
      defaultCsvExportParams,
      defaultExcelExportParams,
      cellSelection,
      rowData,
      onGridReady,
    };
  },
});

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

[Live example: Row Numbers with Export](https://www.ag-grid.com/archive/36.2.0/examples/row-numbers/row-numbers-export/vue3/)

## Customising Row Numbers

Row Numbers can be customised by providing a `RowNumbersOptions` object to the `rowNumbers` grid option:

| Property | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `suppressCellSelectionIntegration` | `boolean` |  |  |  |
| `enableRowResizer` | `boolean` |  |  |  |
| `minWidth` | `number` |  |  |  |
| `width` | `number` |  |  |  |
| `resizable` | `boolean` |  |  |  |
| `contextMenuItems` | `(DefaultMenuItem \| MenuItemDef)[] \| GetContextMenuItems` |  |  |  |
| `onCellClicked` | `Function` |  |  |  |
| `onCellContextMenu` | `Function` |  |  |  |
| `onCellDoubleClicked` | `Function` |  |  |  |
| `headerComponent` | `any` |  |  |  |
| `headerComponentParams` | `any` |  |  |  |
| `suppressNavigable` | `boolean \| SuppressNavigableCallback` |  |  |  |
| `tooltip` | `TooltipDefinition` |  |  |  |
| `tooltipComponentSelector` | `TooltipComponentSelectorFunc` |  |  |  |
| `valueGetter` | `string \| ValueGetterFunc` |  |  |  |
| `valueFormatter` | `string \| ValueFormatterFunc` |  |  |  |
| `maxWidth` | `number` |  |  |  |
| `cellRenderer` | `any` |  |  |  |
| `cellRendererSelector` | `CellRendererSelectorFunc` |  |  |  |
| `cellRendererParams` | `any` |  |  |  |
