# Data Virtualization

## Content

Data virtualization lets FlexGrid handle very large data sets by loading data incrementally as the user scrolls, instead of all at once. This overview gives a quick snapshot of each subtopic and when to use it. 

### Data Virtualization

| Topic | Use Case |
| ----- | -------- |
| [On Demand Mode](/componentone/docs/blazor/online-blazor/controls/flexgrid/features/data-virtualization/on_demand_mode) | Use when the grid cannot know the total row count up front — for example, paging through an API that returns one chunk at a time. Inherit `C1CursorDataCollection<T>`, override `HasMoreItems` (returns `true` while more pages remain) and `GetPageAsync` (returns a page of items and a continuation token). The scroll bar grows and repositions as more data arrives, because the grid never has a fixed total. |
| [Virtual Mode](/componentone/docs/blazor/online-blazor/controls/flexgrid/features/data-virtualization/virtual_mode) | Use when you know the total row count in advance — the grid then sizes the scroll bar correctly and loads only the visible pages. Inherit the abstract `C1VirtualDataCollection<T>`, override `GetPageAsync`, and return the total count alongside each page of items. Assign the collection to `ItemsSource`. |
