Atanas Korchev 52e1d29585 Add multi-key sort, advanced filter criteria, per-column AutoFilter API
Three independent additions to the Spreadsheet API, motivated by the
gap analysis against Excel COM, Office.js, Aspose, and Syncfusion:

Multi-key sort (Pass 3)

- New SortKey class: ColumnIndex (relative to the sort range), Order,
  SortOn, CustomList, CustomColor, CaseSensitive.
- New SortOn enum: Values, CellColor, FontColor.
- Worksheet.Sort(range, params SortKey[]) — stable, supports multiple
  sort levels, custom-list ordering, case sensitivity, sort by color.
- Table.Sort(params SortKey[]) overload using table-relative indices.
- Existing single-key Sort(range, order, keyIndex) retained for
  back-compat; redirects to the new API.
- Empty cells always sort to the bottom regardless of direction
  (matches Excel and pre-existing test).
- Cell.Clone now preserves Format (was dropped on the floor; the bug
  was masked because no caller of Clone read Format until color sort).

Advanced filter criteria (Pass 2A)

- TopFilterCriterion — Top/Bottom N items, by count or percent.
- DynamicFilterCriterion — full DynamicFilterType enum with 34 values
  covering above/below average, today/yesterday/tomorrow, this/last/
  next week/month/quarter/year, year-to-date, individual months, and
  Q1..Q4.
- CellColorFilterCriterion — match cells by background or font color.
- New OnApply(sheet, range) hook on FilterCriterion lets distribution-
  aware criteria (Top, AboveAverage) compute thresholds before the
  per-row Matches loop. Default no-op preserves existing behavior.
- Visitor extended with three new Visit overloads + base no-op
  defaults.

Per-column AutoFilter API (Pass 2B)

- AutoFilter.ApplyValueFilter(col, values), ApplyCustomFilter(col,
  criterion), ApplyTopFilter(col, count, percent, bottom),
  ApplyDynamicFilter(col, type), ApplyColorFilter(col, color,
  fontColor), ClearColumnFilter(col), GetColumnFilter(col).
- Column indices on these methods are RELATIVE to the AutoFilter
  range, matching the convention used by SortKey and Office.js
  TableSort.

Tests

- MultiKeySortContractTests: 11 facts (multi-key, custom list,
  case-sensitive, color sort, range bounds, no-op edges).
- FilterCriterionContractTests: 11 facts (Top/Bottom by count and
  percent, AboveAverage, Today, ThisMonth, Quarter1, color filters,
  visitor dispatch).
- AutoFilterPerColumnTests: 12 facts (each Apply* method, replace
  semantics, per-column clear, validation errors).

3,706 tests pass.
2026-06-15 18:45:11 +03:00
2026-03-16 13:32:27 +02:00
2026-03-11 16:13:33 +02:00
2026-03-11 16:13:33 +02:00
2026-06-15 18:44:02 +03:00
2026-06-15 18:44:02 +03:00
2026-03-11 16:13:33 +02:00
2025-10-22 12:54:05 +03:00
2026-01-08 10:48:34 +02:00
2023-11-14 08:43:39 +02:00
2026-01-11 13:20:15 +02:00
2026-03-11 16:13:33 +02:00
2026-03-11 16:13:33 +02:00
2026-03-11 16:13:33 +02:00
2024-03-21 10:34:14 +02:00

Radzen Blazor Components

Radzen Blazor Components

The most sophisticated free UI component library for Blazor, featuring 145+ native components. MIT licensed, used by thousands of developers at companies like Microsoft, NASA, Porsche, Dell, Siemens, and DHL.

Supports .NET 10, Blazor Server, Blazor WebAssembly, and .NET MAUI Blazor Hybrid.

Online Demos · Documentation · Get Started

Star this repo to support the project and help other Blazor developers discover it.

GitHub StarsLicense - MITNuGet Downloads GitHub ReleaseRelease DateGithub Contributors Radzen Blazor Components - Online Demos

Quick start

Install the NuGet package:

dotnet add package Radzen.Blazor

Add to _Imports.razor:

@using Radzen
@using Radzen.Blazor

Add the theme and script to App.razor:

<!-- inside <head> -->
<RadzenTheme Theme="material" />

<!-- after the last <script> -->
<script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>

Register services in Program.cs:

builder.Services.AddRadzenComponents();

Use a component:

<RadzenButton Text="Hello World" Click="@OnClick" />

For the full setup guide including render modes and dialog/notification configuration, see the getting started instructions.

Components

AI — AIChat, Chat, Markdown, SpeechToTextButton

Data — DataGrid, DataList, PivotDataGrid, DataFilter, PickList, Pager, Tree, Scheduler, Gantt, Timeline, Spreadsheet, Charts (Line, Bar, Column, Area, Pie, Donut, Scatter, Bubble, Spider/Radar, BoxPlot, Bullet, Candlestick, OHLC, Pyramid, Funnel, Waterfall, HighLow, Range Area/Bar/Column, Step Line/Area, Stacked & Full-Stacked variants, Contour), Heatmap, Treemap, RangeNavigator, SankeyDiagram, GaugeCharts (Radial, Linear, Arc)

Forms — TextBox, TextArea, Password, Numeric, Mask, DatePicker, TimePicker, ColorPicker, Dropdown, AutoComplete, ListBox, CheckBox, RadioButtonList, Switch, Slider, Rating, FileInput, SecurityCode, SignaturePad, HtmlEditor

Layout — Card, Panel, Tabs, Accordion, Splitter, Steps, Dialog, Fieldset, Stack, Row/Column, Sidebar

Navigation — Menu, ContextMenu, PanelMenu, Breadcrumb, Link, TreeView, FabMenu, ProfileMenu

Feedback — Notification, Alert, ProgressBar, Badge, Tooltip, Skeleton, Chip, ChipList, AppearanceToggle

Utility — QRCode, Barcode, Gravatar, GoogleMap, DropZone (drag-and-drop)

Theming — 10 built-in themes with light and dark variants. Free themes: Material, Standard, Default, Humanistic, Software. Premium themes (included with Radzen Blazor Pro): Material 3, Fluent. Full CSS variable customization and a built-in theme service for runtime switching.

Browse all components with live demos →

Why choose Radzen Blazor Components?

Free and open source

MIT licensed and free for commercial use. No per-developer fees, no runtime royalties. Install from NuGet or build from source.

💻 100% native Blazor

Written entirely in C#. No JavaScript framework dependencies, no wrappers.

🌱 Actively maintained

Frequent releases with new components and features. Short development cycle — we ship as soon as new features are ready instead of batching into quarterly releases.

🏢 Trusted in production

Used by developers at Microsoft, NASA, Porsche, Dell, Siemens, Nokia, DHL, HSBC, Allianz, Accenture, Deloitte, and thousands of other organizations worldwide.

Support

💬 Community Support

Visit the Radzen Community forum — 400+ active weekly users with an average response time of 2 hours.

🎯 Radzen Blazor Pro

For dedicated support and additional productivity tools, the Radzen Blazor Pro subscription includes:

  • Radzen Blazor Studio — standalone Blazor IDE that provides WYSIWYG design canvas, database scaffolding, CRUD wizards, app templates, and deployment to IIS/Azure
  • Radzen Blazor for Visual Studio — Blazor tooling integrated into Visual Studio 2026
  • Radzen Blazor MCP — cloud-hosted MCP server that gives AI coding assistants (Cursor, Claude Code, GitHub Copilot, VS Code, Visual Studio, JetBrains) real-time access to Radzen component docs, APIs, and ready-made templates
  • Premium themes and theme customization tools
  • Dedicated support with guaranteed 24-hour response time and priority fixes

Run demos locally

Use Radzen.Server.sln to open and run demos as Blazor server application or Radzen.WebAssembly.sln to open and run demos as Blazor WebAssembly application. The demos require the .NET 10 SDK and should preferably be opened in VS2026.

Description
No description provided
Readme 98 MiB
Latest
2026-02-16 21:36:52 +00:00
Languages
C# 62.6%
HTML 28%
SCSS 7.5%
JavaScript 1.8%
CSS 0.1%