syncfusion-blazor-datagrid — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-blazor-datagrid (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The Syncfusion Blazor DataGrid (SfGrid<TValue>) is a high-performance, feature-rich component for displaying and manipulating tabular data. It supports data binding, sorting, filtering, grouping, paging, editing, selection, aggregates, export, virtual/infinite scrolling, templates, and more.
NuGet: Syncfusion.Blazor.Grid + Syncfusion.Blazor.Themes Namespace: Syncfusion.Blazor.Grids
Use this skill when you need to:
These rules govern how this skill MUST behave. They are mandatory and must be strictly followed.
Your responsibility is to interpret any natural‑language user request and provide:
information about all supported aspects of the Syncfusion Blazor DataGrid, including:
The Skill MUST:
If a feature is not supported:
When user requests are incomplete:
Every response MUST:
If the user asks for an unsupported capability:
The Skill MUST follow Syncfusion official patterns, including:
SfGrid, GridColumn, GridEditSettings, etc.)The Skill MUST:
The Skill MUST NOT:
If unsure:
CRITICAL: Event names MUST be verified against references/events.md BEFORE providing code examples. All grid events MUST be defined inside the <GridEvents> component
Common Mistakes to Avoid:
OnSortChange - Does NOT exist. Use Sorting, Sorted insteadOnFilterChange - Does NOT exist. Use Filtering, Filtered insteadOnPageChange - Does NOT exist. Use PageChanging, PageChanged insteadOnGroupChange - Does NOT exist. Use Grouping, Grouped insteadRule: ALWAYS cross-reference references/events.md for:
Verification Checklist Before Providing Event Code:
references/events.mdEventArgs typeCancelable status (✅ or ❌)On prefix, Change suffix)<GridEvents TValue="YourType">DataBound, RowSelecting, Grouped)@onEventName syntax on <SfGrid>async Task for event handlersGridEventArgs, RowSelectEventArgs)DataBound(), Created())void methods for async operationsOnInitialized()OnAfterRenderAsync()OnParametersSet()await with async API methodsasync Taskasync Task@ref="Grid" to get the Grid instanceawait Grid.GroupColumnAsync())TValue="YourDataType" to match your data model📄 Read: references/getting-started.md
_Imports.razor, Program.cs, theme/script setup, basic grid📄 Read: references/getting-started-app-types.md
📄 Read: references/data-binding.md
📄 Read: references/odatav4-adaptor.md
📄 Read: references/web-api-adaptor.md
SfDataManager.Url to arbitrary user-supplied URLs. Use an operator-configured string variable (for example Url="@DataApiUrl" where DataApiUrl is read from ALLOWED_API_URL in configuration), an internal proxy/gateway, field/operator whitelists, and server-side validation/sanitization. See references/web-api-adaptor.md Security Considerations for examples.📄 Read: references/url-adaptor.md
Url="@DataApiUrl" where DataApiUrl is read from ALLOWED_API_URL in configuration), avoid user-supplied endpoints, and route third-party requests through an internal proxy/gateway. See references/url-adaptor.md for examples and configuration snippets.📄 Read: references/custom-adaptor.md
CustomAdaptor, do not trust dm.Params or user-supplied endpoints. Use operator-configured endpoints, validate dm.Params, whitelist fields/operators, and route third-party calls through a proxy. See references/custom-adaptor.md Security Considerations for examples.📄 Read: references/columns.md
📄 Read: references/cell.md
📄 Read: references/sorting.md
📄 Read: references/filtering.md
📄 Read: references/searching.md
📄 Read: references/grouping.md
📄 Read: references/paging.md
📄 Read: references/scrolling.md
📄 Read: references/virtual-scrolling.md
📄 Read: references/infinite-scrolling.md
📄 Read: references/editing.md
Read: references/editing-patterns.md
📄 Read: references/editing-validation.md
ValidationRules, Data Annotation attributes ([Required], [Range], etc.)📄 Read: references/selection.md
📄 Read: references/clipboard.md
📄 Read: references/aggregates.md
📄 Read: references/row-features.md
📄Read: references/templates-structural.md
📄 Read: references/templates-interactive.md
📄 Read: references/toolbar.md
📄 Read: references/context-menu.md
📄 Read: references/excel-export.md
📄 Read: references/pdf-export.md
📄 Read: references/print.md
📄 Read: references/performance.md
📄 Read: references/events.md
📄 Read: references/state-management.md
📄 Read: references/style-and-appearance.md
📄 Read: references/adaptive-layout.md
@page "/datagrid-demo"
@using Syncfusion.Blazor.Grids
<SfGrid DataSource="@Orders" AllowPaging="true" AllowSorting="true" AllowFiltering="true">
<GridPageSettings PageSize="10"></GridPageSettings>
<GridColumns>
<GridColumn Field="OrderID" HeaderText="Order ID" IsPrimaryKey="true" Width="120" TextAlign="TextAlign.Right"></GridColumn>
<GridColumn Field="CustomerID" HeaderText="Customer" Width="150"></GridColumn>
<GridColumn Field="Freight" HeaderText="Freight" Format="C2" Width="120" TextAlign="TextAlign.Right"></GridColumn>
<GridColumn Field="OrderDate" HeaderText="Order Date" Format="d" Width="150" Type="ColumnType.Date"></GridColumn>
<GridColumn Field="ShipCountry" HeaderText="Ship Country" Width="150"></GridColumn>
</GridColumns>
</SfGrid>
@code {
public List<Order> Orders = new List<Order>
{
new Order { OrderID = 10248, CustomerID = "VINET", Freight = 32.38, OrderDate = new DateTime(1996,7,4), ShipCountry = "France" },
new Order { OrderID = 10249, CustomerID = "TOMSP", Freight = 11.61, OrderDate = new DateTime(1996,7,5), ShipCountry = "Germany" },
};
public class Order
{
public int OrderID { get; set; }
public string CustomerID { get; set; }
public double Freight { get; set; }
public DateTime OrderDate { get; set; }
public string ShipCountry { get; set; }
}
}<SfGrid DataSource="@Orders" Toolbar="@(new List<string>() { "Add","Edit","Delete","Update","Cancel" })">
<GridEditSettings AllowAdding="true" AllowEditing="true" AllowDeleting="true" Mode="EditMode.Normal"></GridEditSettings>
<GridColumns>
<GridColumn Field="OrderID" IsPrimaryKey="true" ValidationRules="@(new ValidationRules{Required=true})"></GridColumn>
<GridColumn Field="CustomerID" ValidationRules="@(new ValidationRules{Required=true})"></GridColumn>
<GridColumn Field="Freight" EditType="EditType.NumericEdit"></GridColumn>
</GridColumns>
</SfGrid><SfGrid DataSource="@Orders" AllowGrouping="true" AllowPaging="true">
<GridGroupSettings Columns="@(new string[]{"ShipCountry"})"></GridGroupSettings>
<GridPageSettings PageSize="10"></GridPageSettings>
<GridColumns>
<GridColumn Field="OrderID" Width="120"></GridColumn>
<GridColumn Field="CustomerID" Width="150"></GridColumn>
<GridColumn Field="ShipCountry" Width="150"></GridColumn>
</GridColumns>
</SfGrid><SfGrid @ref="Grid" DataSource="@Orders">...</SfGrid>
@code {
SfGrid<Order> Grid;
// Programmatic operations:
// await Grid.SortColumnAsync("OrderID", SortDirection.Ascending, false);
// await Grid.FilterByColumnAsync("ShipCountry", "equal", "France");
// await Grid.GoToPageAsync(2);
// await Grid.StartEditAsync();
// await Grid.SelectRowAsync(0);
}| Property | Description |
|---|---|
DataSource | Bind IEnumerable<T> or DataManagerRequest |
AllowPaging | Enable paging |
AllowSorting | Enable sorting |
AllowFiltering | Enable column filtering |
AllowGrouping | Enable row grouping |
AllowSelection | Enable row/cell selection |
Height / Width | Fixed dimensions for scrolling |
Toolbar | Built-in or custom toolbar items |
EnableVirtualization | Row virtualization for large data |
EnableInfiniteScrolling | Infinite scroll loading |
EnablePersistence | Save state to localStorage |
EnableAdaptiveUI | Mobile-responsive rendering |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.