github radzenhq/radzen-blazor v12.1.9
12.1.9

3 hours ago

12.1.9 - 2026-10-31

Improvements

  • Spreadsheet formulas support the ^ and % operators, which returned #NAME? before. ^ is left associative and binds looser than unary minus and % is a postfix operator, as in Excel, so =2^3^2 is 64, =-2^2 is 4 and =5%% is 0.0005. ^ and POWER share one calculation: 0^0 returns #NUM!, 0^-1 returns #DIV/0!, overflow returns #NUM! and odd roots of negative numbers such as (-8)^(1/3) work. POWER returned #DIV/0! on overflow before, and arithmetic overflow such as =10^308*10 now returns #NUM! instead of infinity.
  • Spreadsheet accepts a sheet qualified #REF! such as Sheet1!#REF! and 'My Sheet'!#REF!, the form Excel writes when a referenced row or column is deleted. These formulas evaluated to #NAME? before.
  • Spreadsheet deletes several rows or columns in one pass. On a sheet with 60000 formulas, deleting 2000 rows drops from 61s to about 0.5s.
  • DataGrid can expand or collapse all groups from the header of the group expand column. The new ShowGroupExpandAll parameter renders a toggle button in the first group header cell and the public ToggleAllGroupsExpand method does the same from code. The title and aria-label come from the new ExpandAllGroupsTitle and CollapseAllGroupsTitle parameters.
  • Tabs supports closable tabs. RadzenTabsItem gets a Closable parameter that renders a close icon after the title, and clicking it or pressing Delete raises the new Close event with the tab and its index. RemoveItem keeps the same tab selected when an earlier tab is removed and selects a neighbouring enabled tab when the selected tab is removed.
  • Menu can share a header row with other items on small screens through the new rz-display-contents utility on a responsive menu, and rz-display-sm-flex restores it above 768px.

Fixes

  • Spreadsheet row and column deletes update formula references the way Excel does. References after the deleted rows move, a range shrinks when its start or end is deleted, and a reference left with no cells becomes #REF!. Before, remaining rows read the wrong cells, ranges returned #REF! and undo left shifted formulas behind. Undo and redo now restore every formula in the workbook, including validation formulas and chart series.
  • Spreadsheet defined names follow row and column inserts and deletes, and formulas using them keep tracking the moved cells. Names were never updated before, so a name kept pointing at its old address.
  • Spreadsheet row and column inserts keep formulas the parser cannot represent. An insert used to rewrite the formula from a partial parse, which corrupted it.
  • Spreadsheet formulas on other sheets recalculate when a row or column delete changes what a whole column or row reference covers.
  • Spreadsheet context menus act on the whole selection. Right-clicking inside a selection keeps it, and Delete, Hide and Unhide apply to every selected row or column (#2782). Sort limits itself to a multi-cell selection outside tables and autofilters (#2784).
  • Spreadsheet filter menu shows the active filter when it reopens. Every checkbox came back unchecked for text values, and OK then replaced the filter with one on blanks (#2783). Custom, top and above or below average filters reopened with every box ticked and OK cleared them; the checkboxes now show what the filter keeps and OK with no change leaves the filter alone.
  • Steps no longer sends a Blazor Server process into a runaway render loop when an async CanChange handler is combined with a Change handler and a bound SelectedIndex. CanChange is raised for user-initiated changes only and SelectedIndexChanged is raised before Change (#2785).
  • Tabs raises SelectedIndexChanged before Change, so an async CanChange no longer leaves the tab on the old index, and handled keys no longer swallow the next keystroke.
  • Scheduler aligns the all-day row with the time grid when the week view groups by resource.
  • Themes replace :root:has(.rz-layout) with depth-bounded selectors to reduce style recalculation cost.

Don't miss a new radzen-blazor release

NewReleases is sending notifications on new releases.