diff --git a/RadzenBlazorDemos/Pages/PivotDataGridDynamicDataPage.razor b/RadzenBlazorDemos/Pages/PivotDataGridDynamicDataPage.razor
index 769b80b0c..4f2e60f4f 100644
--- a/RadzenBlazorDemos/Pages/PivotDataGridDynamicDataPage.razor
+++ b/RadzenBlazorDemos/Pages/PivotDataGridDynamicDataPage.razor
@@ -4,8 +4,7 @@
PivotDataGrid dynamic data support
- Schema-less datasets are common when data comes from external APIs. This demo shows how to build a pivot table on top of
- IDictionary<string, object> records without defining C# models.
+ Build a Blazor pivot table over schema-less IDictionary<string, object> records from external APIs, configuring pivot fields at runtime without C# models.
diff --git a/RadzenBlazorDemos/Pages/PivotDataGridLoadDataPage.razor b/RadzenBlazorDemos/Pages/PivotDataGridLoadDataPage.razor
index 8d3618b6e..ae5a440e5 100644
--- a/RadzenBlazorDemos/Pages/PivotDataGridLoadDataPage.razor
+++ b/RadzenBlazorDemos/Pages/PivotDataGridLoadDataPage.razor
@@ -6,7 +6,7 @@
PivotDataGrid LoadData
- The LoadData event allows you to perform custom paging, sorting and filtering.
+ Bind the Blazor Pivot DataGrid to remote data with the LoadData event, fetching aggregated cross-tab results on demand.
diff --git a/RadzenBlazorDemos/Pages/PivotDataGridODataPage.razor b/RadzenBlazorDemos/Pages/PivotDataGridODataPage.razor
index 5a2ba068c..7492fd55e 100644
--- a/RadzenBlazorDemos/Pages/PivotDataGridODataPage.razor
+++ b/RadzenBlazorDemos/Pages/PivotDataGridODataPage.razor
@@ -6,7 +6,7 @@
PivotDataGrid OData
- Use the LoadData event to get data from a REST service.
+ Bind the Blazor Pivot DataGrid to an OData service and build cross-tabulation reports from the remote query.
diff --git a/RadzenBlazorDemos/Pages/PivotDataGridPage.razor b/RadzenBlazorDemos/Pages/PivotDataGridPage.razor
index d0dbfad73..4f4cec287 100644
--- a/RadzenBlazorDemos/Pages/PivotDataGridPage.razor
+++ b/RadzenBlazorDemos/Pages/PivotDataGridPage.razor
@@ -6,7 +6,7 @@
Blazor PivotDataGrid
- Create cross-tabulation tables for analyzing large datasets with aggregation, drill-down, and grouping.
+ The Blazor Pivot DataGrid builds cross-tabulation reports - rows, columns, and aggregated values - from your data, with drill-down and grouping.
This example demonstrates full pivot table functionality with columns, rows, and aggregates.
diff --git a/RadzenBlazorDemos/Services/ExampleService.cs b/RadzenBlazorDemos/Services/ExampleService.cs
index 9d0c79443..e5bd8eecf 100644
--- a/RadzenBlazorDemos/Services/ExampleService.cs
+++ b/RadzenBlazorDemos/Services/ExampleService.cs
@@ -1578,33 +1578,54 @@ namespace RadzenBlazorDemos
{
Name = "IQueryable",
Path = "/pivot-data-grid",
- Title = "Blazor Pivot DataGrid - IQueryable | Free UI Components by Radzen",
- Description = "The RadzenPivotDataGrid component allows you to create cross-tabulation aggregates from IQueryable.",
- Tags = new [] { "pivot", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "query", "IQueryable" }
+ Title = "Blazor Pivot Table - Pivot DataGrid (IQueryable) | Free UI Components by Radzen",
+ Description = "The Blazor Pivot DataGrid (RadzenPivotDataGrid) creates cross-tabulation reports - rows, columns, and aggregated values - from an IQueryable data source.",
+ Tags = new [] { "pivot", "pivot table", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "query", "IQueryable" },
+ Related = new [] { "pivot-data-grid-load-data", "pivot-data-grid-dynamic", "pivot-data-grid-odata", "datagrid" },
+ Faq = new []
+ {
+ new FaqItem { Question = "What is the Blazor Pivot DataGrid?", Answer = "It is a pivot table (cross-tab) component that groups data into rows and columns and shows aggregated values, with drill-down." },
+ new FaqItem { Question = "How do I bind the Pivot DataGrid to data?", Answer = "Set Data to an IQueryable (or use the LoadData event for remote data) and define the row, column, and value fields to aggregate." }
+ }
},
new Example
{
Name = "LoadData",
Path = "/pivot-data-grid-load-data",
Title = "Blazor Pivot DataGrid - LoadData Binding | Free UI Components by Radzen",
- Description = "The RadzenPivotDataGrid component allows you to create cross-tabulation aggregates from IQueryable.",
- Tags = new [] { "pivot", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "query", "IQueryable" }
+ Description = "Bind the Blazor Pivot DataGrid to remote data with the LoadData event, fetching aggregated cross-tab results on demand.",
+ Tags = new [] { "pivot", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "loaddata", "remote" },
+ Related = new [] { "pivot-data-grid", "pivot-data-grid-odata", "datagrid-loaddata" },
+ Faq = new []
+ {
+ new FaqItem { Question = "How do I load Pivot DataGrid data on demand?", Answer = "Handle the LoadData event to fetch and aggregate data from the server as the grid needs it." }
+ }
},
new Example
{
Name = "Dynamic data",
Path = "/pivot-data-grid-dynamic",
Title = "Blazor Pivot DataGrid - Dynamic Data | Free UI Components by Radzen",
- Description = "Bind RadzenPivotDataGrid to schema-less IDictionary records and configure fields dynamically.",
- Tags = new [] { "pivot", "dynamic", "dictionary", "analysis", "aggregation", "drill-down", "datagrid", "table" }
+ Description = "Bind the Blazor Pivot DataGrid to schema-less IDictionary records and configure pivot fields dynamically.",
+ Tags = new [] { "pivot", "dynamic", "dictionary", "analysis", "aggregation", "drill-down", "datagrid", "table" },
+ Related = new [] { "pivot-data-grid", "pivot-data-grid-load-data", "datagrid-dynamic" },
+ Faq = new []
+ {
+ new FaqItem { Question = "How do I bind the Pivot DataGrid to dynamic data?", Answer = "Bind Data to records of IDictionary and configure the row, column, and value fields at runtime, without a fixed model." }
+ }
},
new Example
{
Name = "OData",
Path = "/pivot-data-grid-odata",
Title = "Blazor Pivot DataGrid - OData Binding | Free UI Components by Radzen",
- Description = "The RadzenPivotDataGrid component allows you to create cross-tabulation aggregates from IQueryable.",
- Tags = new [] { "odata", "pivot", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "query", "IQueryable" }
+ Description = "Bind the Blazor Pivot DataGrid to an OData service and build cross-tabulation reports from the remote query.",
+ Tags = new [] { "odata", "pivot", "crosstab", "analysis", "aggregation", "drill-down", "datagrid", "table", "query", "remote" },
+ Related = new [] { "pivot-data-grid", "pivot-data-grid-load-data", "datagrid-odata" },
+ Faq = new []
+ {
+ new FaqItem { Question = "How do I bind the Pivot DataGrid to OData?", Answer = "Point the grid at an OData endpoint via the LoadData event; it builds the cross-tabulation from the remote query results." }
+ }
}
}
},
@@ -4470,6 +4491,13 @@ namespace RadzenBlazorDemos
return dataGrid?.Children != null ? CollectLeaves(dataGrid.Children).ToList() : Enumerable.Empty();
}
+ // Every leaf page under the "PivotDataGrid" category. Article-eligible for schema.
+ public IEnumerable GetPivotDataGridPages()
+ {
+ var pivot = Examples.FirstOrDefault(c => c.Name == "PivotDataGrid");
+ return pivot?.Children != null ? CollectLeaves(pivot.Children).ToList() : Enumerable.Empty();
+ }
+
// Maps each Forms page path to its component hub (display label + primary page path). Unlike
// charts or DataGrid, Forms has no single landing page; every component (DropDown, Button, ...)
// is its own hub. Single-page components hub on themselves; grouped ones (DropDown, HtmlEditor)
diff --git a/RadzenBlazorDemos/Services/SeoSchema.cs b/RadzenBlazorDemos/Services/SeoSchema.cs
index 2fcc15dbd..01a812003 100644
--- a/RadzenBlazorDemos/Services/SeoSchema.cs
+++ b/RadzenBlazorDemos/Services/SeoSchema.cs
@@ -79,6 +79,11 @@ namespace RadzenBlazorDemos
return ArticleGraph(example, url, exampleService, "DataGrid", "datagrid");
}
+ if (InCluster(exampleService.GetPivotDataGridPages(), path))
+ {
+ return ArticleGraph(example, url, exampleService, "Pivot DataGrid", "pivot-data-grid");
+ }
+
// Forms has no single hub; each component is its own breadcrumb root.
if (path != null && exampleService.GetFormsComponentHubs().TryGetValue(path, out var formsHub))
{