Implementing Syncfusion Blazor TreeGrid
The Syncfusion Blazor TreeGrid (SfTreeGrid<TValue>) renders hierarchical data in a tabular format with expand/collapse rows. It supports self-referential flat data (IdMapping/ParentIdMapping) and nested child collections, combined with a full suite of grid features including editing, filtering, sorting, virtualization, and export.
When to Use This Skill
- User needs a hierarchical/tree-structured data table in a Blazor app
- User mentions SfTreeGrid, TreeGrid, IdMapping, ParentIdMapping
- User needs parent-child rows with expand/collapse in a grid
- User needs CRUD operations on tree-structured data
- User needs to export, filter, sort, or page hierarchical data
- User needs to bind TreeGrid to a GraphQL API using
GraphQLAdaptor
- User is working with organizational charts, task hierarchies, bill of materials, file explorer-style data in grid form
- User migrating from flat DataGrid to hierarchical TreeGrid
- User setting up TreeGrid in a Blazor Web App, WASM, Server, or MAUI project
Trigger keywords: TreeGrid, Tree Grid, SfTreeGrid, hierarchical grid, parent-child grid, IdMapping, ParentIdMapping, tree data table, nested grid rows, Syncfusion Blazor tree, GraphQL TreeGrid, GraphQLAdaptor TreeGrid
🔒 Mandatory Key Rules
These rules govern how this skill MUST behave. They are mandatory and must be strictly followed.
1. Purpose and Responsibility
Your responsibility is to interpret any natural‑language user request and provide accurate, complete, and validated information about all supported aspects of the Syncfusion Blazor TreeGrid, including:
- Public APIs
- Properties
- Events
- Features
- Behaviors
2. Accuracy and API Compliance
The Skill MUST:
- Use only officially supported Syncfusion TreeGrid features.
- NEVER invent APIs, methods, properties, events, behaviors, or future features.
- NEVER provide unsupported or hypothetical code samples.
- ALWAYS follow official Syncfusion component design patterns.
If a feature is not supported: clearly state the limitation and suggest a supported alternative when possible.
3. Interpreting Natural-Language Requests
When user requests are incomplete:
- Infer reasonable assumptions using official TreeGrid best practices.
- Fill missing gaps with accurate and relevant information.
- Request clarification only when essential.
4. Handling Unsupported User Requests
If the user asks for an unsupported capability:
- Explicitly state that it is not supported
- Suggest official alternatives or valid workarounds
- NEVER simulate or fabricate impossible functionality
5. Design Pattern Enforcement
The Skill MUST follow Syncfusion official patterns, including:
- Correct component structure (
SfTreeGrid, TreeGridColumn, TreeGridEditSettings, TreeGridEvents, etc.)
- Proper async event and API usage
- Valid configuration properties and enums
- Supported data‑binding approaches (self-referential, hierarchical, remote, custom adaptor, GraphQL)
- Real event patterns and names
6. Quality, Completeness & Reliability
The Skill MUST:
- Use only validated and real TreeGrid capabilities
- Provide actionable and implementation‑ready guidance
- Ensure clarity so users can follow without guesswork
- Maintain clean, readable, and professional formatting
7. No-Hallucination Safeguard
The Skill MUST NOT:
- Invent non‑existent APIs or behavior
- Suggest unsupported modes, features, or configuration
- Provide incorrect, misleading, or unverifiable code
- Describe undocumented internal behavior
If unsure: ask for clarification OR clearly state the limitation.
8. Event Name Verification Requirement
CRITICAL: Event names MUST be verified against references/events.md BEFORE providing code examples. All tree grid events MUST be defined inside the <TreeGridEvents> component
Common Mistakes to Avoid:
- ❌
OnSortChange — Does NOT exist. Use Sorting, Sorted instead
- ❌
OnFilterChange — Does NOT exist. Use Filtering, Filtered instead
Rule: ALWAYS cross-reference references/events.md for:
- Exact event names (case-sensitive)
- Event argument types (see Rule 11 for namespace resolution)
- Whether events are cancelable (✅ or ❌)
- When they fire (before/after operation)
9. Read Reference Files Before Writing Code
Before generating any code, identify every feature in the request and read the reference file for each one. The snippets in this file are abbreviated — they omit critical rules and known pitfalls. Reference files are the authoritative source.
⚠️ Read ALL reference files that apply — not just the one most obvious from the query.
10. Namespace and Type Resolution Rules
Rule 1: Always use full namespace qualification to avoid CS0104 "ambiguous reference" errors. Types exist in both Syncfusion.Blazor.TreeGrid and Syncfusion.Blazor.Grids namespaces.
Rule 2: Always include @using Syncfusion.Blazor.Grids; in _Imports.razor or component to prevent CS0103 "missing reference" errors for:
- Event argument types (
ActionEventArgs, RowDataBoundEventArgs, BeforeCopyPasteEventArgs, etc.)
- The
Action enum (Action.Sorting, Action.Save, etc.)
- Component classes (
TreeGridPageSettings, TreeGridFilterSettings, TreeGridSelectionSettings, etc.)
- Event handler support classes
Rule 3: The following event arg types belong to Syncfusion.Blazor.TreeGrid — add @using Syncfusion.Blazor.TreeGrid; (NOT Syncfusion.Blazor.Grids):
RowExpandingEventArgs<TValue>, RowExpandedEventArgs<TValue>
RowCollapsingEventArgs<TValue>, RowCollapsedEventArgs<TValue>
CheckBoxChangeEventArgs<TValue>
Type Reference:
| Type |
Namespace |
Example |
| FilterType |
TreeGrid |
Syncfusion.Blazor.TreeGrid.FilterType.Excel |
| EditMode |
TreeGrid |
Syncfusion.Blazor.TreeGrid.EditMode.Row |
| CopyHierarchyType |
TreeGrid |
Syncfusion.Blazor.TreeGrid.CopyHierarchyType.Both |
| Action |
Grids |
Syncfusion.Blazor.Grids.Action.Save |
| TextAlign |
Grids |
Syncfusion.Blazor.Grids.TextAlign.Right |
| ColumnType |
Grids |
Syncfusion.Blazor.Grids.ColumnType.Date |
| EditType |
Grids |
Syncfusion.Blazor.Grids.EditType.DatePickerEdit |
| SelectionMode |
Grids |
Syncfusion.Blazor.Grids.SelectionMode.Row |
| SelectionType |
Grids |
Syncfusion.Blazor.Grids.SelectionType.Multiple |
| ClipMode |
Grids |
Syncfusion.Blazor.Grids.ClipMode.Ellipsis |
| GridLine |
Grids |
Syncfusion.Blazor.Grids.GridLine.Horizontal |
| AggregateType |
Grids |
Syncfusion.Blazor.Grids.AggregateType.Sum |
| CellSelectionMode |
Grids |
Syncfusion.Blazor.Grids.CellSelectionMode.Box |
Component Overview
<SfTreeGrid DataSource="@TreeData"
IdMapping="TaskId"
ParentIdMapping="ParentId"
TreeColumnIndex="1"
AllowSorting="true"
AllowFiltering="true"
AllowPaging="true">
<TreeGridColumns>
<TreeGridColumn Field="TaskId" HeaderText="ID" Width="80" IsPrimaryKey="true" />
<TreeGridColumn Field="TaskName" HeaderText="Task Name" Width="200" />
<TreeGridColumn Field="Duration" HeaderText="Duration" Width="100" />
<TreeGridColumn Field="Progress" HeaderText="Progress" Width="100" />
</TreeGridColumns>
</SfTreeGrid>
Key concepts:
IdMapping — property name that uniquely identifies each row
ParentIdMapping — property name pointing to the parent row's ID (null/0 = root)
TreeColumnIndex — column index that shows the expand/collapse icon (0-based)
Navigation Guide
Setup & Getting Started
- Read: references/getting-started.md
- NuGet install,
_Imports.razor, Program.cs, theme/script setup, basic grid, IdMapping/ParentIdMapping/TreeColumnIndex, expand-collapse all, OnActionFailure
Data Binding
- Read: references/data-binding.md
- Self-referential flat data, hierarchical nested children, remote URL/OData/Web API,
SfDataManager, load on demand
- Read: references/custom-binding.md
DataAdaptor override, Read/ReadAsync, Insert/Update/Delete, paging & sorting support, self-referential only
- Read: references/graphql.md
- Hot Chocolate server,
GraphQLAdaptor, GraphQLAdaptorOptions, DataManagerRequestInput, CRUD mutations, cascading delete, CORS
Columns & Cells
- Read: references/columns.md
ColumnType, Format, TextAlign, frozen, reorder, resize, chooser, stacked headers, column menu, foreign key
- Read: references/cell.md
QueryCellInfo, CustomAttributes, ClipMode, GridLines, tooltips
Sorting, Filtering & Searching
- Read: references/sorting.md
AllowSorting, multi-sort, SortComparer, SortColumnAsync, ClearSortingAsync, hierarchy preserved
- Read: references/filtering.md
AllowFiltering, FilterType (FilterBar/Menu/Excel/CheckBox), hierarchy modes, operators, FilterByColumnAsync. ⚠️ See filtering.md for FilterTemplate rules
- Read: references/searching.md
- Toolbar Search,
SearchAsync, GridSearchSettings, hierarchy modes, highlight/clear
Editing
- Read: references/editing.md
- Edit modes (Cell/Row/Dialog/Batch), edit types, command column, validation, template editing, EF Core. ⚠️ See editing.md for
ValidationRules. Always add @using Syncfusion.Blazor.Grids when using <TreeGridEvents>
Rows & Selection
- Read: references/rows.md
RowDataBound, row/detail template, drag-and-drop, row height, row spanning
- Read: references/selection.md
- Row/cell/both modes, checkbox column, toggle, drag select, programmatic selection, touch
Paging & Virtualization
- Read: references/paging.md
AllowPaging, TreeGridPageSettings, PageSize, pager position/template, programmatic navigation
- Read: references/virtualization.md
EnableVirtualization, EnableColumnVirtualization, vs. paging, limitations
Toolbar, Menus & Templates
- Read: references/toolbar.md
- Built-in & custom items,
EnableToolbarItemsAsync, OnToolbarClick
- Read: references/context-menu.md
ContextMenuItems, custom items, ContextMenuItemClicked, conditional show/hide
- Read: references/templates.md
- Column/header/row/detail/toolbar templates, loading indicator
Exporting & Scrolling
- Read: references/exporting.md
ExportToExcelAsync, ExportToPdfAsync, PrintAsync, custom data/headers, themes
- Read: references/scrolling.md
- Frozen rows/columns (
FrozenRows, IsFrozen, FreezeDirection), AllowFreezeLineMoving, EnableStickyHeader, ScrollIntoViewAsync
Advanced Features
- Read: references/aggregates.md
TreeGridAggregateColumn (Field+Type required), AggregateType, FooterTemplate, ShowChildSummary, custom LINQ, page-scope limitation
- Read: references/clipboard.md
- Copy (Ctrl+C/Ctrl+Shift+H),
CopyAsync, paste (Box+Batch), CopyHierarchyMode, BeforeCopyPaste
- Read: references/autofill.md
EnableAutoFill + Cell/Box selection + Batch edit, limitations
- Read: references/adaptive-layout.md
EnableAdaptiveUI, full-screen dialogs, vertical row mode
- Read: references/state-management.md
EnablePersistence, persisted properties, manual state methods
Events
- Read: references/events.md
TreeGridEvents<TValue>, OnActionBegin/OnActionComplete, RowDataBound, QueryCellInfo, cancel actions
Quick Start Example
1. Install NuGet: Syncfusion.Blazor.TreeGrid
2. Register in _Imports.razor:
@using Syncfusion.Blazor
@using Syncfusion.Blazor.TreeGrid
3. Add CSS in wwwroot/index.html or App.razor:
<link href="_content/Syncfusion.Blazor.Themes/material.css" rel="stylesheet" />
4. Add to Program.cs:
builder.Services.AddSyncfusionBlazor();
5. Minimal component:
@using Syncfusion.Blazor.TreeGrid
<SfTreeGrid DataSource="@TreeData" IdMapping="Id" ParentIdMapping="ParentId" TreeColumnIndex="1">
<TreeGridColumns>
<TreeGridColumn Field="Id" HeaderText="ID" Width="80" IsPrimaryKey="true" />
<TreeGridColumn Field="Name" HeaderText="Name" Width="200" />
<TreeGridColumn Field="Status" HeaderText="Status" Width="120" />
</TreeGridColumns>
</SfTreeGrid>
@code {
public class TaskItem
{
public int Id { get; set; }
public int? ParentId { get; set; }
public string Name { get; set; }
public string Status { get; set; }
}
private List<TaskItem> TreeData = new()
{
new TaskItem { Id = 1, ParentId = null, Name = "Project Alpha", Status = "In Progress" },
new TaskItem { Id = 2, ParentId = 1, Name = "Design Phase", Status = "Done" },
new TaskItem { Id = 3, ParentId = 1, Name = "Development", Status = "In Progress" },
new TaskItem { Id = 4, ParentId = 3, Name = "Backend API", Status = "Pending" },
};
}
Common Patterns
Full-Featured TreeGrid (Sorting + Filtering + Paging + Editing)
<SfTreeGrid @ref="TreeGridRef"
DataSource="@TreeData"
IdMapping="Id"
ParentIdMapping="ParentId"
TreeColumnIndex="1"
AllowSorting="true"
AllowFiltering="true"
AllowPaging="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Update", "Cancel" })">
<TreeGridEditSettings AllowAdding="true"
AllowEditing="true"
AllowDeleting="true"
Mode="Syncfusion.Blazor.TreeGrid.EditMode.Row" />
<TreeGridPageSettings PageSize="10" />
<TreeGridColumns>
<TreeGridColumn Field="Id" IsPrimaryKey="true" Visible="false" />
<TreeGridColumn Field="Name" HeaderText="Task" Width="220" />
<TreeGridColumn Field="Duration" HeaderText="Days" Width="100" />
<TreeGridColumn Field="Progress" HeaderText="%" Width="100" />
</TreeGridColumns>
</SfTreeGrid>
@code {
private SfTreeGrid<TaskItem> TreeGridRef;
// ... data and model
}
Excel & PDF Export
<SfTreeGrid @ref="TreeGridRef" AllowExcelExport="true" AllowPdfExport="true"
Toolbar="@(new List<string> { "ExcelExport", "PdfExport" })">
<TreeGridEvents TValue="TaskItem" />
...
</SfTreeGrid>
@code {
private SfTreeGrid<TaskItem> TreeGridRef;
private async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args)
{
if (args.Item.Id.Contains("excelexport"))
await TreeGridRef.ExportToExcelAsync();
else if (args.Item.Id.Contains("pdfexport"))
await TreeGridRef.ExportToPdfAsync();
}
}
1---2name: syncfusion-blazor-treegrid3description: Implements the Syncfusion Blazor TreeGrid (SfTreeGrid) for hierarchical or self‑referential data with expandable nodes and nested row structures. Use this skill when building tree‑view workflows in Blazor Server, WebAssembly, Web App, or MAUI applications. Supports GraphQL binding, templates, sorting, filtering, editing, paging, aggregates, search, exporting, virtualization, clipboard actions, and state management for rich hierarchical data experiences.4---5
6# Implementing Syncfusion Blazor TreeGrid
7
8The Syncfusion Blazor TreeGrid (`SfTreeGrid<TValue>`) renders hierarchical data in a tabular format with expand/collapse rows. It supports self-referential flat data (IdMapping/ParentIdMapping) and nested child collections, combined with a full suite of grid features including editing, filtering, sorting, virtualization, and export.
9
10## When to Use This Skill
11
12- User needs a **hierarchical/tree-structured data table** in a Blazor app
13- User mentions **SfTreeGrid**, **TreeGrid**, **IdMapping**, **ParentIdMapping**
14- User needs **parent-child rows** with expand/collapse in a grid
15- User needs **CRUD operations** on tree-structured data
16- User needs to **export**, **filter**, **sort**, or **page** hierarchical data
17- User needs to bind TreeGrid to a **GraphQL API** using `GraphQLAdaptor`
18- User is working with **organizational charts**, **task hierarchies**, **bill of materials**, **file explorer-style** data in grid form
19- User migrating from flat DataGrid to hierarchical TreeGrid
20- User setting up TreeGrid in a **Blazor Web App**, **WASM**, **Server**, or **MAUI** project
21
22**Trigger keywords:** TreeGrid, Tree Grid, SfTreeGrid, hierarchical grid, parent-child grid, IdMapping, ParentIdMapping, tree data table, nested grid rows, Syncfusion Blazor tree, GraphQL TreeGrid, GraphQLAdaptor TreeGrid
23
24---
25
26## 🔒 Mandatory Key Rules
27
28These rules govern how this skill MUST behave. They are mandatory and must be strictly followed.
29
30### 1. Purpose and Responsibility
31
32Your responsibility is to interpret any natural‑language user request and provide **accurate**, **complete**, and **validated** information about all supported aspects of the **Syncfusion Blazor TreeGrid**, including:
33
34- Public APIs
35- Properties
36- Events
37- Features
38- Behaviors
39
40### 2. Accuracy and API Compliance
41
42The Skill MUST:
43
44- Use **only officially supported** Syncfusion TreeGrid features.
45- **NEVER** invent APIs, methods, properties, events, behaviors, or future features.
46- **NEVER** provide unsupported or hypothetical code samples.
47- ALWAYS follow official Syncfusion component design patterns.
48
49If a feature is **not supported**: clearly state the limitation and suggest a supported alternative when possible.
50
51### 3. Interpreting Natural-Language Requests
52
53When user requests are incomplete:
54
55- Infer reasonable assumptions using official TreeGrid best practices.
56- Fill missing gaps with accurate and relevant information.
57- Request clarification **only** when essential.
58
59### 4. Handling Unsupported User Requests
60
61If the user asks for an unsupported capability:
62
63- Explicitly state that it is not supported
64- Suggest official alternatives or valid workarounds
65- NEVER simulate or fabricate impossible functionality
66
67### 5. Design Pattern Enforcement
68
69The Skill MUST follow Syncfusion official patterns, including:
70
71- Correct component structure (`SfTreeGrid`, `TreeGridColumn`, `TreeGridEditSettings`, `TreeGridEvents`, etc.)
72- Proper async event and API usage
73- Valid configuration properties and enums
74- Supported data‑binding approaches (self-referential, hierarchical, remote, custom adaptor, GraphQL)
75- Real event patterns and names
76
77### 6. Quality, Completeness & Reliability
78
79The Skill MUST:
80
81- Use only validated and real TreeGrid capabilities
82- Provide actionable and implementation‑ready guidance
83- Ensure clarity so users can follow without guesswork
84- Maintain clean, readable, and professional formatting
85
86### 7. No-Hallucination Safeguard
87
88The Skill MUST NOT:
89
90- Invent non‑existent APIs or behavior
91- Suggest unsupported modes, features, or configuration
92- Provide incorrect, misleading, or unverifiable code
93- Describe undocumented internal behavior
94
95If unsure: ask for clarification **OR** clearly state the limitation.
96
97### 8. Event Name Verification Requirement
98
99**CRITICAL:** Event names MUST be verified against `references/events.md` BEFORE providing code examples. All tree grid events MUST be defined inside the `<TreeGridEvents>` component
100
101**Common Mistakes to Avoid:**
102
103- ❌ `OnSortChange` — Does NOT exist. Use `Sorting`, `Sorted` instead
104- ❌ `OnFilterChange` — Does NOT exist. Use `Filtering`, `Filtered` instead
105
106
107**Rule:** ALWAYS cross-reference `references/events.md` for:
108
109- Exact event names (case-sensitive)
110- Event argument types (see **Rule 11** for namespace resolution)
111- Whether events are cancelable (✅ or ❌)
112- When they fire (before/after operation)
113
114### 9. Read Reference Files Before Writing Code
115
116Before generating **any** code, identify every feature in the request and **read the reference file for each one**. The snippets in this file are abbreviated — they omit critical rules and known pitfalls. Reference files are the authoritative source.
117
118> ⚠️ **Read ALL reference files that apply — not just the one most obvious from the query.**
119
120### 10. Namespace and Type Resolution Rules
121
122**Rule 1:** Always use full namespace qualification to avoid CS0104 "ambiguous reference" errors. Types exist in both `Syncfusion.Blazor.TreeGrid` and `Syncfusion.Blazor.Grids` namespaces.
123
124**Rule 2:** Always include `@using Syncfusion.Blazor.Grids;` in `_Imports.razor` or component to prevent CS0103 "missing reference" errors for:
125- Event argument types (`ActionEventArgs`, `RowDataBoundEventArgs`, `BeforeCopyPasteEventArgs`, etc.)
126- The `Action` enum (`Action.Sorting`, `Action.Save`, etc.)
127- Component classes (`TreeGridPageSettings`, `TreeGridFilterSettings`, `TreeGridSelectionSettings`, etc.)
128- Event handler support classes
129
130**Rule 3:** The following event arg types belong to `Syncfusion.Blazor.TreeGrid` — add `@using Syncfusion.Blazor.TreeGrid;` (NOT `Syncfusion.Blazor.Grids`):
131- `RowExpandingEventArgs<TValue>`, `RowExpandedEventArgs<TValue>`
132- `RowCollapsingEventArgs<TValue>`, `RowCollapsedEventArgs<TValue>`
133- `CheckBoxChangeEventArgs<TValue>`
134
135**Type Reference:**
136
137| Type | Namespace | Example |
138|---|---|---|
139| **FilterType** | TreeGrid | `Syncfusion.Blazor.TreeGrid.FilterType.Excel` |
140| **EditMode** | TreeGrid | `Syncfusion.Blazor.TreeGrid.EditMode.Row` |
141| **CopyHierarchyType** | TreeGrid | `Syncfusion.Blazor.TreeGrid.CopyHierarchyType.Both` |
142| **Action** | Grids | `Syncfusion.Blazor.Grids.Action.Save` |
143| **TextAlign** | Grids | `Syncfusion.Blazor.Grids.TextAlign.Right` |
144| **ColumnType** | Grids | `Syncfusion.Blazor.Grids.ColumnType.Date` |
145| **EditType** | Grids | `Syncfusion.Blazor.Grids.EditType.DatePickerEdit` |
146| **SelectionMode** | Grids | `Syncfusion.Blazor.Grids.SelectionMode.Row` |
147| **SelectionType** | Grids | `Syncfusion.Blazor.Grids.SelectionType.Multiple` |
148| **ClipMode** | Grids | `Syncfusion.Blazor.Grids.ClipMode.Ellipsis` |
149| **GridLine** | Grids | `Syncfusion.Blazor.Grids.GridLine.Horizontal` |
150| **AggregateType** | Grids | `Syncfusion.Blazor.Grids.AggregateType.Sum` |
151| **CellSelectionMode** | Grids | `Syncfusion.Blazor.Grids.CellSelectionMode.Box` |
152---
153
154## Component Overview
155
156```razor
157<SfTreeGrid DataSource="@TreeData"
158 IdMapping="TaskId"
159 ParentIdMapping="ParentId"
160 TreeColumnIndex="1"
161 AllowSorting="true"
162 AllowFiltering="true"
163 AllowPaging="true">
164 <TreeGridColumns>
165 <TreeGridColumn Field="TaskId" HeaderText="ID" Width="80" IsPrimaryKey="true" />
166 <TreeGridColumn Field="TaskName" HeaderText="Task Name" Width="200" />
167 <TreeGridColumn Field="Duration" HeaderText="Duration" Width="100" />
168 <TreeGridColumn Field="Progress" HeaderText="Progress" Width="100" />
169 </TreeGridColumns>
170</SfTreeGrid>
171```
172
173**Key concepts:**
174- `IdMapping` — property name that uniquely identifies each row
175- `ParentIdMapping` — property name pointing to the parent row's ID (null/0 = root)
176- `TreeColumnIndex` — column index that shows the expand/collapse icon (0-based)
177
178---
179
180## Navigation Guide
181
182### Setup & Getting Started
183- **Read:** [references/getting-started.md](references/getting-started.md)
184 - NuGet install, `_Imports.razor`, `Program.cs`, theme/script setup, basic grid, `IdMapping`/`ParentIdMapping`/`TreeColumnIndex`, expand-collapse all, `OnActionFailure`
185
186### Data Binding
187- **Read:** [references/data-binding.md](references/data-binding.md)
188 - Self-referential flat data, hierarchical nested children, remote URL/OData/Web API, `SfDataManager`, load on demand
189- **Read:** [references/custom-binding.md](references/custom-binding.md)
190 - `DataAdaptor` override, `Read`/`ReadAsync`, Insert/Update/Delete, paging & sorting support, self-referential only
191- **Read:** [references/graphql.md](references/graphql.md)
192 - Hot Chocolate server, `GraphQLAdaptor`, `GraphQLAdaptorOptions`, `DataManagerRequestInput`, CRUD mutations, cascading delete, CORS
193
194### Columns & Cells
195- **Read:** [references/columns.md](references/columns.md)
196 - `ColumnType`, `Format`, `TextAlign`, frozen, reorder, resize, chooser, stacked headers, column menu, foreign key
197- **Read:** [references/cell.md](references/cell.md)
198 - `QueryCellInfo`, `CustomAttributes`, `ClipMode`, `GridLines`, tooltips
199
200### Sorting, Filtering & Searching
201- **Read:** [references/sorting.md](references/sorting.md)
202 - `AllowSorting`, multi-sort, `SortComparer`, `SortColumnAsync`, `ClearSortingAsync`, hierarchy preserved
203- **Read:** [references/filtering.md](references/filtering.md)
204 - `AllowFiltering`, `FilterType` (FilterBar/Menu/Excel/CheckBox), hierarchy modes, operators, `FilterByColumnAsync`. ⚠️ See [filtering.md](references/filtering.md#filter-bar-default) for `FilterTemplate` rules
205- **Read:** [references/searching.md](references/searching.md)
206 - Toolbar Search, `SearchAsync`, `GridSearchSettings`, hierarchy modes, highlight/clear
207
208### Editing
209- **Read:** [references/editing.md](references/editing.md)
210 - Edit modes (Cell/Row/Dialog/Batch), edit types, command column, validation, template editing, EF Core. ⚠️ See [editing.md](references/editing.md#column-validation) for `ValidationRules`. Always add `@using Syncfusion.Blazor.Grids` when using `<TreeGridEvents>`
211
212### Rows & Selection
213- **Read:** [references/rows.md](references/rows.md)
214 - `RowDataBound`, row/detail template, drag-and-drop, row height, row spanning
215- **Read:** [references/selection.md](references/selection.md)
216 - Row/cell/both modes, checkbox column, toggle, drag select, programmatic selection, touch
217
218### Paging & Virtualization
219- **Read:** [references/paging.md](references/paging.md)
220 - `AllowPaging`, `TreeGridPageSettings`, `PageSize`, pager position/template, programmatic navigation
221- **Read:** [references/virtualization.md](references/virtualization.md)
222 - `EnableVirtualization`, `EnableColumnVirtualization`, vs. paging, limitations
223
224### Toolbar, Menus & Templates
225- **Read:** [references/toolbar.md](references/toolbar.md)
226 - Built-in & custom items, `EnableToolbarItemsAsync`, `OnToolbarClick`
227- **Read:** [references/context-menu.md](references/context-menu.md)
228 - `ContextMenuItems`, custom items, `ContextMenuItemClicked`, conditional show/hide
229- **Read:** [references/templates.md](references/templates.md)
230 - Column/header/row/detail/toolbar templates, loading indicator
231
232### Exporting & Scrolling
233- **Read:** [references/exporting.md](references/exporting.md)
234 - `ExportToExcelAsync`, `ExportToPdfAsync`, `PrintAsync`, custom data/headers, themes
235- **Read:** [references/scrolling.md](references/scrolling.md)
236 - Frozen rows/columns (`FrozenRows`, `IsFrozen`, `FreezeDirection`), `AllowFreezeLineMoving`, `EnableStickyHeader`, `ScrollIntoViewAsync`
237
238### Advanced Features
239- **Read:** [references/aggregates.md](references/aggregates.md)
240 - `TreeGridAggregateColumn` (`Field`+`Type` required), `AggregateType`, `FooterTemplate`, `ShowChildSummary`, custom LINQ, page-scope limitation
241- **Read:** [references/clipboard.md](references/clipboard.md)
242 - Copy (Ctrl+C/Ctrl+Shift+H), `CopyAsync`, paste (Box+Batch), `CopyHierarchyMode`, `BeforeCopyPaste`
243- **Read:** [references/autofill.md](references/autofill.md)
244 - `EnableAutoFill` + Cell/Box selection + Batch edit, limitations
245- **Read:** [references/adaptive-layout.md](references/adaptive-layout.md)
246 - `EnableAdaptiveUI`, full-screen dialogs, vertical row mode
247- **Read:** [references/state-management.md](references/state-management.md)
248 - `EnablePersistence`, persisted properties, manual state methods
249
250### Events
251- **Read:** [references/events.md](references/events.md)
252 - `TreeGridEvents<TValue>`, `OnActionBegin`/`OnActionComplete`, `RowDataBound`, `QueryCellInfo`, cancel actions
253
254---
255
256## Quick Start Example
257
258**1. Install NuGet:** `Syncfusion.Blazor.TreeGrid`
259
260**2. Register in `_Imports.razor`:**
261```razor
262@using Syncfusion.Blazor
263@using Syncfusion.Blazor.TreeGrid
264```
265
266**3. Add CSS in `wwwroot/index.html` or `App.razor`:**
267```html
268<link href="_content/Syncfusion.Blazor.Themes/material.css" rel="stylesheet" />
269```
270
271**4. Add to `Program.cs`:**
272```csharp
273builder.Services.AddSyncfusionBlazor();
274```
275
276**5. Minimal component:**
277```razor
278@using Syncfusion.Blazor.TreeGrid
279
280<SfTreeGrid DataSource="@TreeData" IdMapping="Id" ParentIdMapping="ParentId" TreeColumnIndex="1">
281 <TreeGridColumns>
282 <TreeGridColumn Field="Id" HeaderText="ID" Width="80" IsPrimaryKey="true" />
283 <TreeGridColumn Field="Name" HeaderText="Name" Width="200" />
284 <TreeGridColumn Field="Status" HeaderText="Status" Width="120" />
285 </TreeGridColumns>
286</SfTreeGrid>
287
288@code {
289 public class TaskItem
290 {
291 public int Id { get; set; }
292 public int? ParentId { get; set; }
293 public string Name { get; set; }
294 public string Status { get; set; }
295 }
296
297 private List<TaskItem> TreeData = new()
298 {
299 new TaskItem { Id = 1, ParentId = null, Name = "Project Alpha", Status = "In Progress" },
300 new TaskItem { Id = 2, ParentId = 1, Name = "Design Phase", Status = "Done" },
301 new TaskItem { Id = 3, ParentId = 1, Name = "Development", Status = "In Progress" },
302 new TaskItem { Id = 4, ParentId = 3, Name = "Backend API", Status = "Pending" },
303 };
304}
305```
306
307---
308
309## Common Patterns
310
311### Full-Featured TreeGrid (Sorting + Filtering + Paging + Editing)
312```razor
313<SfTreeGrid @ref="TreeGridRef"
314 DataSource="@TreeData"
315 IdMapping="Id"
316 ParentIdMapping="ParentId"
317 TreeColumnIndex="1"
318 AllowSorting="true"
319 AllowFiltering="true"
320 AllowPaging="true"
321 Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Update", "Cancel" })">
322 <TreeGridEditSettings AllowAdding="true"
323 AllowEditing="true"
324 AllowDeleting="true"
325 Mode="Syncfusion.Blazor.TreeGrid.EditMode.Row" />
326 <TreeGridPageSettings PageSize="10" />
327 <TreeGridColumns>
328 <TreeGridColumn Field="Id" IsPrimaryKey="true" Visible="false" />
329 <TreeGridColumn Field="Name" HeaderText="Task" Width="220" />
330 <TreeGridColumn Field="Duration" HeaderText="Days" Width="100" />
331 <TreeGridColumn Field="Progress" HeaderText="%" Width="100" />
332 </TreeGridColumns>
333</SfTreeGrid>
334
335@code {
336 private SfTreeGrid<TaskItem> TreeGridRef;
337 // ... data and model
338}
339```
340
341### Excel & PDF Export
342```razor
343<SfTreeGrid @ref="TreeGridRef" AllowExcelExport="true" AllowPdfExport="true"
344 Toolbar="@(new List<string> { "ExcelExport", "PdfExport" })">
345 <TreeGridEvents TValue="TaskItem" OnToolbarClick="ToolbarClickHandler" />
346 ...
347</SfTreeGrid>
348
349@code {
350 private SfTreeGrid<TaskItem> TreeGridRef;
351
352 private async Task ToolbarClickHandler(Syncfusion.Blazor.Navigations.ClickEventArgs args)
353 {
354 if (args.Item.Id.Contains("excelexport"))
355 await TreeGridRef.ExportToExcelAsync();
356 else if (args.Item.Id.Contains("pdfexport"))
357 await TreeGridRef.ExportToPdfAsync();
358 }
359}
360```