NuGrid supports pagination when data is grouped, allowing you to navigate through large grouped datasets efficiently.
Combine grouping with pagination:
<script setup lang="ts">
const grouping = ref(['category'])
</script>
<template>
<NuGrid
v-model:grouping="grouping"
:data="data"
:columns="columns"
:layout="{ mode: 'group' }"
:paging="{
pageSize: 20,
pageSizeSelector: [10, 20, 50, 100]
}"
/>
</template>
Pagination interacts with grouping in the following ways:
Standard grouped layout with collapsible headers:
<template>
<NuGrid
v-model:grouping="grouping"
:data="data"
:columns="columns"
:layout="{ mode: 'group', stickyHeaders: true }"
:paging="{ pageSize: 20 }"
/>
</template>
Separate tables per group with their own headers:
<template>
<NuGrid
v-model:grouping="grouping"
:data="data"
:columns="columns"
:layout="{ mode: 'splitgroup', stickyHeaders: true }"
:paging="{ pageSize: 20 }"
/>
</template>
<script setup lang="ts">
import type { NuGridColumn, NuGridPagingOptions } from '#nu-grid/types'
interface Task {
id: number
name: string
category: string
status: 'pending' | 'in-progress' | 'completed'
assignee: string
}
// Generate sample data
const data = ref<Task[]>(generateTasks(100))
// Group by category
const grouping = ref(['category'])
// Pagination options
const paginationOptions: NuGridPagingOptions = {
enabled: true,
pageSize: 20,
pageSizeSelector: [10, 20, 50, 100],
}
const columns: NuGridColumn<Task>[] = [
{ accessorKey: 'id', header: 'ID', size: 60 },
{ accessorKey: 'name', header: 'Task Name', size: 200 },
{ accessorKey: 'category', header: 'Category', size: 100 },
{ accessorKey: 'status', header: 'Status', size: 100 },
{ accessorKey: 'assignee', header: 'Assignee', size: 100 },
]
</script>
<template>
<NuGrid
v-model:grouping="grouping"
:data="data"
:columns="columns"
:layout="{ mode: 'group', stickyHeaders: true }"
:paging="paginationOptions"
/>
</template>
Paging also works with nested groups:
<script setup lang="ts">
// Group by category, then by status
const grouping = ref(['category', 'status'])
</script>
<template>
<NuGrid
v-model:grouping="grouping"
:data="data"
:columns="columns"
:layout="{ mode: 'group' }"
:paging="{ pageSize: 25 }"
/>
</template>