SEO: enrich PivotDataGrid cluster (4 pages)

Add GetPivotDataGridPages + a cluster branch in SeoSchema (Home > Pivot DataGrid
> variant). Primary title now leads with 'Pivot Table' to capture the larger
query; fixed copy-pasted descriptions on the LoadData/OData pages; added FAQ,
related links, and keyword intros.
This commit is contained in:
Atanas Korchev
2026-06-23 16:44:11 +03:00
parent 55d327db46
commit e143807e91
6 changed files with 46 additions and 14 deletions

View File

@@ -4,8 +4,7 @@
PivotDataGrid <strong>dynamic</strong> data support
</RadzenText>
<RadzenText TextStyle="TextStyle.Subtitle1" TagName="TagName.P" class="rz-pb-4">
Schema-less datasets are common when data comes from external APIs. This demo shows how to build a pivot table on top of
<code>IDictionary&lt;string, object&gt;</code> records without defining C# models.
Build a Blazor pivot table over schema-less <code>IDictionary&lt;string, object&gt;</code> records from external APIs, configuring pivot fields at runtime without C# models.
</RadzenText>
<RadzenExample ComponentName="PivotDataGrid" Example="PivotDataGridDynamicData">

View File

@@ -6,7 +6,7 @@
PivotDataGrid <strong>LoadData</strong>
</RadzenText>
<RadzenText TextStyle="TextStyle.Subtitle1" TagName="TagName.P" class="rz-pb-4">
The <code>LoadData</code> event allows you to perform custom paging, sorting and filtering.
Bind the Blazor Pivot DataGrid to remote data with the <code>LoadData</code> event, fetching aggregated cross-tab results on demand.
</RadzenText>
<RadzenExample ComponentName="PivotDataGrid" Example="PivotDataGridLoadData">

View File

@@ -6,7 +6,7 @@
PivotDataGrid <strong>OData</strong>
</RadzenText>
<RadzenText TextStyle="TextStyle.Subtitle1" TagName="TagName.P" class="rz-pb-4">
Use the <code>LoadData</code> 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.
</RadzenText>
<RadzenExample ComponentName="PivotDataGrid" Example="PivotDataGridOData" AdditionalSourceCodePages=@(new[] { "PivotDataGridODataAggregateValue.razor" })>

View File

@@ -6,7 +6,7 @@
Blazor PivotDataGrid
</RadzenText>
<RadzenText TextStyle="TextStyle.Subtitle1" TagName="TagName.P" class="rz-pb-4">
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.
</RadzenText>
<RadzenText TextStyle="TextStyle.Body2" class="rz-my-6">
This example demonstrates full pivot table functionality with columns, rows, and aggregates.

View File

@@ -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<string, object> 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<string, object> 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<string, object> 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<Example>();
}
// Every leaf page under the "PivotDataGrid" category. Article-eligible for schema.
public IEnumerable<Example> GetPivotDataGridPages()
{
var pivot = Examples.FirstOrDefault(c => c.Name == "PivotDataGrid");
return pivot?.Children != null ? CollectLeaves(pivot.Children).ToList() : Enumerable.Empty<Example>();
}
// 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)

View File

@@ -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))
{