github radzenhq/radzen-blazor v11.4.0
11.4.0

4 hours ago

11.4.0 - 2026-09-14

Improvements

  • HtmlEditor resizes a selected image by dragging its handles: corner handles keep the aspect ratio (Shift releases it), side handles change one axis, a badge shows the size during the drag, Esc cancels it and Ctrl+Z reverts it. The size is written to the width and height attributes so the insert-image dialog reports it (#2703). Thanks to @MaurycyBartczak!
  • RangeNavigator shows an opt-in hover tooltip with the nearest point's category and value via ShowTooltip and TooltipFormatString (#2717). Thanks to @pianomanjh!
  • Spreadsheet supports the & text concatenation operator, workbook defined names in formulas and xlsx files, and the NA() function. IF ignores errors in the branch it does not return, unary plus returns its operand unchanged, a formula whose result is an empty cell displays 0, MATCH and XMATCH return #N/A for an empty lookup value and skip error cells, and numeric text is coerced in arithmetic while empty cells compare as empty text, zero or FALSE, matching Excel.
  • Spreadsheet xlsx export allocates 12 MB instead of 442 MB over 550,000 cells and runs faster than ClosedXML: cells are written to the stream in one sorted pass instead of a tree per row, references and numbers are formatted into spans, the shared string table lives in rented arrays and formats are read without being created. The shared string table and cell styles are now numbered in document order so identical workbooks serialize identically. Thanks to @pianomanjh!
  • Spreadsheet adds CellStore.SetValues for filling a block in bulk, shares one CellData for every empty cell and skips the dependency graph for cells nothing depends on, cutting fill allocations by 47%. Thanks to @pianomanjh!
  • DropDown, DropDownDataGrid, ListBox and AutoComplete hide the decorative trigger icon from screen readers, which announced "arrow_drop_down" (#2714). Thanks to @RizgarOzan!
  • Demos upload endpoint only writes image files. Thanks to @pianomanjh!
  • Premium themes updated.

Fixes

  • Spreadsheet no longer hangs while loading files with mutually referencing ranges. Each formula cell is evaluated once per recalculation instead of exponentially many times and the xlsx reader batches evaluation instead of recalculating after every formula it sets (#2719).
  • Spreadsheet pasting from Excel no longer clears the cell below the pasted range; a trailing CRLF ends the last row instead of starting an empty one (#2707).
  • Spreadsheet reads inline string cells (t="inlineStr") instead of loading them as empty, reads a rich-text shared string as one entry instead of one per run so later cells no longer show fragments of other cells, keeps shared, inline, str and quote-prefixed cells as text so "05" and "007" no longer load as numbers, and reads boolean cells back as booleans. Thanks to @pianomanjh!
  • Spreadsheet shared formulas expanded while loading xlsx no longer throw on & or drop parentheses and unary operators, and cross-sheet references resolve on load because sheets are evaluated only after all of them are added.
  • Spreadsheet saving a workbook whose merge covers a populated cell outside the sheet bounds no longer throws, and saving no longer inserts an unpopulated merge anchor into the store. Thanks to @pianomanjh!
  • RangeNavigator recomputes its scales and refreshes when the series data changes without a new domain (#2713). Thanks to @pianomanjh!
  • DataGrid a resize drag in an outer grid no longer pins a nested grid's frozen columns to the outer grid's offsets; frozen cell lookups are scoped to the grid's own table and rows. Thanks to @pianomanjh!
  • DataGrid Reset reads the declared OrderIndex again instead of keeping the saved column order. Thanks to @pianomanjh!
  • Carousel honors an initial SelectedIndex. The scroll ran before the child items existed and threw, leaving the first slide visible while the pager showed the selected one, and changing the index during prerendering failed the request. The scroll now runs after render: instant on first render, animated for later changes.
  • DropDown, DropDownDataGrid and ListBox omit the option aria-label instead of exposing the .NET type name when TextProperty is missing, and DropDownDataGrid announces the selected item by its text (#2715).
  • HtmlEditor no longer clones the whole document on every input while an image is selected when reading the value.
  • Mask honors an explicit id attribute when Name is also set; since 10.4.6 Name replaced the id so locators such as #x timed out, and TextBox, TextArea and Password now pass the same id to JS interop that they render (#2701).

Don't miss a new radzen-blazor release

NewReleases is sending notifications on new releases.