github radzenhq/radzen-blazor v12.0.7
12.0.7

3 hours ago

12.0.7 - 2026-10-08

Fixes

  • Chart adopts the ViewStart and ViewEnd a ViewChange handler assigns during a mouse wheel zoom or scrollbar pan. The callbacks fired while the internal zoom guard was active, so a handler that re-anchored the bound range, for example to keep the latest data in view, updated the parent state while the chart kept rendering the cursor-centered range until the next unrelated render. After ViewStartChanged, ViewEndChanged and ViewChange complete the chart now takes the range it received, clamps it and raises ZoomChanged again if the zoom level moved.
  • DatePicker with ShowDays="false" is usable again with the drill-down navigation. The month and year grids were rendered inside the same ShowDays block as the day table, so a month or year picker showed only the header: the title cycled through the month and year views with nothing drawn, the year-range view had no way back and its arrows moved the current date by twelve years. The grids are now rendered regardless of ShowDays and only the day table is gated by it. With ShowDays false the calendar opens in the month grid, the title drills up to the year grid, a year cell returns to the month grid and a month cell stays there with the picked month highlighted and focused. Picking a month changes CurrentDate and raises CurrentDateChanged as the v11 header dropdowns did; the bound Value is not committed, so existing handlers keep working. DropDown navigation with ShowDays false still renders only the header dropdowns.
  • Spreadsheet loads workbooks whose formulas reference large, mutually overlapping ranges without overflowing the stack, and computes them like Excel. Each referenced cell was evaluated recursively and every range expanded eagerly, so INDEX($W$7:$W$521,...) in column V and INDEX($V$31:$V$521,...) in column W recursed through the whole block and crashed with a stack overflow in WebAssembly. Recalculation now follows a calculation chain: only the cells dirtied by a change are recalculated, every other formula cell is read from its stored value, and a formula that reads a dirty precedent not yet calculated is re-queued after it, so stack depth is bounded by formula nesting instead of data size and cycles are detected at calculation time. Cell and range expressions evaluate to references that are dereferenced only where values are needed, so INDEX, ROW, COLUMN, ROWS, COLUMNS, VLOOKUP, HLOOKUP and XLOOKUP read only the cells they use, and IF, IFERROR, IFNA, IFS, SWITCH and CHOOSE evaluate only the branch they take, so ROW(A5) in A5 is 5 instead of #CIRCULAR and CHOOSE(1,5,1/0) is 5. An error criterion in COUNTIF, SUMIF, AVERAGEIF and the *IFS functions matches cells holding the same error instead of failing the formula. The dependency graph stores each distinct range once with the formulas that read it, which cut building it for the reported workbook from 23.8 s to 0.3 s. All formula cells of the three attached workbooks match the values Excel saved (#2750).
  • Spreadsheet loads large formula workbooks faster. During a recalculation the values of a range are read once and later reads get a copy, unless the range holds a cell that is still pending or a self or circular read, so the 2,333 range reads made while loading the workbook from #2750 no longer read 3.8 million cells. The formula lexer allocates trivia lists only for tokens that have trivia, shared formulas reuse the parsed master formula instead of parsing it again for every cell, and unpopulated cells share a single empty instance. Worksheets are read with a streaming XmlReader instead of loading each sheet part into an XDocument, so the cell elements are never materialized as XElement and XAttribute objects. Loading that workbook in WebAssembly allocates 244 MB instead of 535 MB and takes 10.7 s instead of 20.4 s.

Don't miss a new radzen-blazor release

NewReleases is sending notifications on new releases.