Great news for owners of FastReport VCL and FastReport .NET Single licenses! Until April 30, you can renew your license with an impressive 50% discount.
Meet the new release 2025.2 for supply options FastReport .NET: WinForms, WPF, Avalonia, Mono, WEB, Ultimate. Support is waiting for you in this update .NET 9, a library for executing scripts in C#, a plugin for importing documents from Word, a connector to Apache Ignite, improvements to the designer and exports, as well as new features in WebReport.
Don't miss the opportunity to update FastReport .NET and expand your capabilities!
Import of Word documents
The FastReport .NET Ultimate component set now includes a plug-in that allows you to import Microsoft Word (.docx) documents. When you open such a file, it is converted into a FastReport .NET report template (.frx).
Due to the large differences in formats, it is not always possible to completely match two documents. However, this plugin allows you to significantly reduce the time required to create a template based on an existing docx file.
At the moment our plugin does not support: background highlighting of part of a line, Shapes, as well as nested vector graphics Vector Markup Language (VML) and OLE objects. You can read about the peculiarities of import and how to connect the plugin in the article.
Read the article
.NET 9 Support
This platform improves application performance and adds many new features for your projects. There is more support in this update .NET 9 for:
FastReport .NET,
FastReport.Core,
FastReport.Core.Skia,
FastReport.WPF,
FastReport.Avalonia,
FastReport.Web,
FastReport.Web.Skia,
FastReport.Blazor.Wasm.
We have done away with binary serialization. BinaryFormatter caused a number of security issues and Microsoft in .NET 9 dropped its use. Our team has also removed the BinaryFormatter class from the source code. You can read more about it at this link.
Learn more
Report Designer Improvements
Also in this version, several useful features have been introduced to simplify work with reports.
In the Object Inspector, you can now quickly copy data from the list of object properties using the Ctrl + C hotkeys. This will help you easily transfer object properties between different parts of the document or even between different reports.
In addition, it is now possible to copy totals and parameters while preserving the nesting hierarchy. This means that when copying complex data structures, their original organization will be preserved, avoiding
Connection to Apache Ignite
With this update, a new plugin has been added that greatly simplifies the process of working with Apache Ignite databases when creating reports. This plugin allows you to directly connect reports to the specified databases, providing convenient access to the necessary data for analysis and visualization.
The Apache Ignite connector is implemented based on the .NET Thin Client Ignite.NET. It provides the ability to connect to Apache Ignite clusters, work with caches (including SQL tables) and process various types of data.
In addition, the connector supports connecting to one or more Apache Ignite nodes. Node addresses are specified in host:port format and separated by commas. Connection is possible with or without authentication (if authenticationEnabled is used in the configuration).
The connector supports working with caches created as key-value and SQL tables. For caches with QueryEntity metadata, operations of getting the list of fields and their data types are supported. Read more in the article.
Read the article
Improvements of the preview window
In OutlineControl we have added handy buttons with icons for minimizing and maximizing. These buttons were there before, but without icons.
In addition, properties have been added that allow you to change the width and height of the scrollbars in the preview window.
Export Improvements
Added export of number, currency, date, time and percent formats to OpenOffice Calc (.ods).
This update also introduces a new paragraph export mode for OpenOffice Writer (.odt) format files. This makes it easier to edit generated documents and makes them more visually understandable to humans. The new export mode does not replace but complements the existing mode and extends its capabilities.
In addition, an “Autosize width” option for MS Excel export has been added.
Will only work with certain values of text object properties: AutoWidth and AutoShrink properties are enabled; HorzAling property value is any except Justify.
Changes in WebReport
Search across the entire report
Added text search for the entire report, similar to the desktop version of the Viewer, if a word is found on another page, the viewer will automatically switch to it. Search is available in WebReport with FastReport.Core, in WebReport for Blazor Server and WebReport for Blazor Wasm. You can control the display of the search button by using the property:
WebReport.Toolbar.ShowSearchButton = false;
The highlighting color of the words found can be changed using the property:
WebReport.Toolbar.SearchHighlight = Color.Red;
Improvements in caching configuration for WebReport
With the release of the new version, WebReport now has additional options for caching configuration.
First, you can now set individual caching parameters for each specific instance of WebReport. Previously, only general settings applied to all reports were available, which could be inconvenient, especially if you needed to keep certain reports in memory longer. With the webReport.CacheOptions property, you can customize the cache retention time for a specific report.
Secondly, there is more flexibility in setting the report cache retention time thanks to the AbsoluteExpirationDuration and AbsoluteExpiration options. Previously, only the CacheDuration option was used, which was based on a sliding principle: if the report was used for a given amount of time, the timer would reset and the report would remain in memory. This could result in a report never being removed from the cache. The new parameters allow you to specify the exact time when a report should be permanently deleted from the cache, regardless of its usage. In this case, CacheDuration and the new parameters AbsoluteExpiration and AbsoluteExpirationDuration can be used together.
// Global settings for all WebReports
services.AddFastReport(options =>
{
options.CacheOptions.CacheDuration = TimeSpan.FromMinutes(10);
options.CacheOptions.AbsoluteExpirationDuration = TimeSpan.FromMinutes(20);
});
// Individual WebReport settings, which take precedence
webReport.CacheOptions = new WebReportCacheOptions()
{
CacheDuration = // ...,
AbsoluteExpiration = DateTime.Now.AddMinutes(30),
// or
AbsoluteExpirationDuration = // ...
};
Updated demo web application on ASP .NET Core
We have updated our demo application to ASP.NET Core, so that the product pleases you not only with its functionality, but also with its appearance. The updated application is available at the link.
Online demo
Updated Online Designer Demo
In addition, we have updated the Online Designer demo application, where you can view more examples of our reports, export them, and try the updated online designer on them. The updated application is available at the link.
Try the demo
Support of FastScript .NET
Added ability to use FastScript .NET to run report scripts.
FastScript .NET is a library for running C# scripts. It does not depend on CodeDOM/Roslyn and can be used in environments where code generation is restrictedя (Native AOT, iOS, WASM).
FastScript .NET is included in the following supply options FastReport .NET: WinForms, WPF, Avalonia, Mono, WEB, Ultimate.
To use FastScript .NET in the FastReport .NET:
in your application, add the FastReport.Plugins.FastScript nuget package;
run the following code before the first use of the Report class:
FastReport.Code.CodeProvider.DefaultProvider = typeof(FastReport.Code.FastScript.FastScriptCodeProvider);
Now, all the reports will utilise FastScript .NET to calculate expressions and run the report script.
FastScript .NET does not support VB.NET script language. The dynamic type is not supported too, some of "Advanced Matrix" functions will not work.
Detailed documentation on how to work with FastScript .NET is available at this link.
Online documentation
Full list of changes
[Engine]+ added new scripting engine - FastScript .NET;+ added support for vertical tabulation;+ added import of DOCX files to FRX report template;+ added support of encoding for Chinese (simplified) language when converting RTF;+ added the ability to disable integration with FastReport Cloud;+ added GS1 Datamatrix barcode;+ added the conversion of SkBitmap to a Bitmap and Image in FastReport.SkiaDrawing;- fixed error with RichObject (zh-tw codepage);- fixed a bug with simultaneous compilation of a report script when preparing reports in multiple threads;- fixed a bug when printing an empty matrix;- fixed bug when passing null value to a MS SQL query parameter;- fixed errors when compiling libraries under .NET 9;- fixed a bug leading to infinite loop when child band of "Page Header" or "Column Header" has "StartNewPage" property turned on;- fixed a bug leading to System.ArgumentException when connecting to MySQL;- fixed calculation of PrintableExpression of page;- fixed a bug leading to System.NullReferenceException in the Report.GetParameterValue method;
[Designer]+ added a possibility to copy data from the list of properties of an object using the keyboard shortcut Ctrl + C;+ added the ability to copy totals and parameters, preserving their hierarchy;* in the window for opening the report page, it is still possible to select only a *.frx file;* in the Mono designer settings, the tab "Code page" with inaccessible settings was hidden;* changed the logic of style processing for .rtf files when opened in the designer;- fixed a bug where the image of PictureObject disappeared after canceling changes in the designer when editing a prepared page;- fixed a bug with the search filter in the data tree that reset the current search state;- removed the "New Dialog" context menu item in the Community version, which when selected resulted in an unhandled exception;- fixed a bug when running preview from a designer;- fixed System.InvalidOperationException when deleting a data source column when that column no longer exists in the database;- fixed reading the GS1 DataMatrix barcode as a DataMatrix;- fixed a bug with selecting layout of band columns in "Data Band Column Editor" window;- fixed deleting objects and categories from the sidebar in the designer;- fixed a bug with displaying icons that appeared in version AvaloniaUI 11.1;- fixed deleting objects and categories from the sidebar in the designer;- fixed a bug when adding IsNull function via "Text editor" added an extra comma;
[Preview]+ added a button to send a report by email when using MAPI in a preview in WPF;+ added collapse and expand buttons with icons in OutlineControl;+ added the ability to change the width and height of the scroll bar through the code;- fixed disabling the button to save the prepared report in the preview;- fixed disabling the "Storage" tab in the report saving menu in the preview;- fixed bug with "Advanced Matrix" when filters are missing;- fixed a bug where the print form did not appear in the preview when pressing Ctrl + P;- fixed a bug with incorrect paper size for printers without "Auto paper size" option, when clicking "Settings" and then "Advanced" buttons in "Print" window;
[Exports]+ added export of "Author" property in export to PDF/A;+ added support for HTML non-breaking space tag when exporting to Excel;+ added export of number, currency, date, time, and percentage formats to OpenOffice Calc (.ods);+ added "Shrink to fit" option for export to MS Excel;+ added paragraph export mode in OpenOffice Writer export (.odt files)* now, when exporting Pages with ExportAlias property to Excel, suffix "-n" will not be added to sheet name if it's possible;- fixed a bug where the font name was exported without quotes to HTML;- fixed a bug in FR.Core with some user fonts;- fixed a bug in HTML-export when the barcode border was not displayed;- fixed the error of opening files when exporting a report with special characters to ODT and ODS formats;- fixed incorrect display and export of some unicode symbols in Skia/Avalonia;- fixed export of TableObject fills to PDF;- fixed export of TableObject and page fills to HTML;- added export of height for the merged cells in Excel export;
[WebReport]+ added WebReport search;+ added WebReport WASM search;+ added .NET 9 support for FastReport.Blazor.Wasm;+ added the ability to create a connection to a stored procedures in WebReport;+ added the ability to configure caching for a single WebReport using the WebReport.CacheOptions property;- fixed an issue that made it impossible to change the DataConnection after it was created in OnlineDesigner;- fixed converting of TextObject to SVG when preview in Blazor;- fixed support for the Size of the CommandParameter;- fixed rendering of page toggle buttons in Blazor when they are disabled;- fixed a bug when the value of the RouteBasePath parameter was not taken into account when setting up WebReport;
[.NET Core]+ added a filter for connection tables;+ added a JsonConnectionType class for use in the JsonDataConnection.GetConnectionType method and GetConnectionType() and GetParameterType() methods;- fixed a bug with encoding when connecting of CSV data file for report in .NET Core;
[Common]* changed width of "About..." window;
[Extras]+ added connection to Apache Ignite;
[Demos]+ added UsedPackages.version file for WPF packs;- fixed Avalonia and WPF name in demo.
We are pleased to announce the release of FastReport Business Graphics .NET! In this update, we focused on increasing compatibility, improving support for modern platforms, and preparing for future versions of .NET.
Compatibility with .NET 9
One of the key changes was the addition of the necessary attributes to the components to ensure full compatibility with .NET 9. This means that FastReport Business Graphics .NET now works correctly in the most latest environments, maintaining stability, performance and support for new features of the framework.
If you are planning to port to .NET 9 or are already using it in your projects, you can be sure that our components are ready to work without any additional modifications!
Updating supported .NET versions
We have updated the list of target platforms, focusing on modern developer requirements:
The main version is now considered to be .NET 8 – it is a stable and productive framework that is recommended for most projects.
Support for .NET 6 is also retained for those who haven't upgraded yet but are using long-term support (LTS).
Added support for .NET 9 – for developers who want to use the latest technologies and features.
Thanks to these changes, FastReport Business Graphics .NET remains a relevant tool for working with business graphics in your projects.
List of changes
[Common] + added attributes to components required for compatibility with .NET 9; + .NET versions have been updated, the main version is now .NET 8, and supported target platforms include .NET 6, .NET 8, and .NET 9.
In this update, we focused on speeding up calculations, improving compatibility with .NET 9, and making changes easier to understand.
Transition to invariant mathematics – up to 2 times faster!
One of the most significant improvements was the abandonment of the "variant" type in favor of invariant mathematics. This change led to a significant acceleration of the make and recalculation of the cube, in some cases - more than 2 times!
In addition, the cube now works correctly in various localizations, including non-standard ones (other than Latin), which expands its application for international users.
Splitting changes by product
FastCube .NET updates are now split into different products (WinForms, Web, Mono, and general FastCube .NET). This makes the update process more transparent – you can immediately see what changes affect the version you need.
Fixed error reading stream from compressed file
Previously, in some cases, compressed files were not processed correctly, which could cause data to load incorrectly or not load at all.
Now this bug is fixed and the mechanism for working with compressed files is completely fixed. This means:
Correct reading of data from archive files.
More stable performance when loading large files.
No errors in multithreaded mode, which is especially important for Web applications.
If your project makes heavy use of data compression, we recommend upgrading to version 2025.2 to avoid potential issues.
The file signature for the cube is now immutable (const instead of static)
Previously, the file signature was declared as static, which allowed it to be changed during program execution. In some cases, this could lead to errors related to data structure changes or even file corruption.
New version:
The signature is now declared as const, making it immutable at the code level.
The integrity of the file structure is guaranteed, regardless of changes in the program code.
Improved stability of working with cube files in different environments, including Web and Mono.
This is especially important for developers who work in multi-user and distributed systems.
Compatibility with .NET 9
One of the key improvements was the addition of .NET 9 support. FastCube .NET is now fully compatible with the latest version of the platform, allowing you to take advantage of new features and improvements offered by Microsoft. This is an important update for developers who are port to .NET 9 or planning to use it in their projects.
We would like to point out that support for new versions ensures stable operation of the product and integration with the latest technologies.
Updating supported versions of .NET
The main version is now .NET 8, which is the current standard for most enterprise projects. However, support for .NET 6 is retained, which is a long-term version with extended support.
Additionally, as mentioned, .NET 9 support has been added, giving you flexibility in choosing the platform to work with FastCube .NET, whether it's stability (via .NET 6) or the latest features and performance improvements (.NET 9).
Fixes and improvements in the demo example
In the demo for the boolean format, a bug was fixed that caused the data to be displayed incorrectly. Now this format works correctly and does not cause errors, which improves the experience of users working with demo examples.
In the "Sales by months" demo cube, there were previously situations where the headers were displayed incorrectly. Now this error has been fixed, and the field names are displayed correctly, ensuring accuracy and ease of working with data.
Improving data serialization
One of the important improvements is the optimization of the data serialization process. New methods have been added and properties have been set, due to which default values are now serialized less frequently.
Reducing the amount of serialized data reduces the load on the system when saving and loading information. In addition, these changes contribute to improved performance, which will be especially noticeable when working with large data sets.
List of changes
FastCube .NET WinForms
[Common]- fixed a bug where the stream from a compressed file was read incorrectly;* the file signature for the cube now has a const modifier instead of static and cannot be changed;
FastCube .NET Web
[Common]- fixed a bug where the stream from a compressed file was read incorrectly;* the file signature for the cube now has a const modifier instead of static and cannot be changed;
FastCube .NET Mono
[Common]- fixed a bug where the stream from a compressed file was read incorrectly;* the file signature for the cube now has a const modifier instead of static and cannot be changed;
FastCube .NET
[Common]+ added compatibility with .NET 9;+ .NET versions have been updated, the main version is now .NET 8, and supported target platforms include .NET 6, .NET 8, and .NET 9;* some properties are hidden from the user in the WinForms editor;* the "variant" type was replaced by variant mathematics;* improved serialization, added methods and set properties, due to which default values are serialized less often;- corrected display of the field name in the "Sales by months" demo cube;- fixed bug in demo example for boolean format.
Other critical changes
General changes for FastCube Web, FastCube WinForms and FastCube Mono
Deprecated delegates. They were replaced with compatible ones, because the Variant type was removed and now boxing via Object is used instead:
Click here to expand
FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, FastReport.Olap.Utils.Variant, System.Int32)
FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, System.Int32)
FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], FastReport.Olap.Utils.Variant[], System.Int32)
Deprecated fields. The following fields have been replaced with the corresponding properties:
Click here to expand
FastReport.Olap.Types.BoolValue -> public System.Boolean Value
FastReport.Olap.Types.ByteValue -> public System.Byte Value
FastReport.Olap.Types.DateTimeValue -> public System.DateTime Value
FastReport.Olap.Types.DecimalValue -> public System.Decimal Value
FastReport.Olap.Types.DoubleValue -> public System.Double Value
FastReport.Olap.Types.FloatValue -> public System.Single Value
FastReport.Olap.Types.IntValue -> public System.Int32 Value
FastReport.Olap.Types.LongValue -> public System.Int64 Value
FastReport.Olap.Types.SByteValue -> public System.SByte Value
FastReport.Olap.Types.ShortValue -> public System.Int16 Value
FastReport.Olap.Types.StringValue -> public System.String Value
FastReport.Olap.Types.TimeSpanValue -> public System.TimeSpan Value
FastReport.Olap.Types.UIntValue -> public System.UInt32 Value
FastReport.Olap.Types.ULongValue -> public System.UInt64 Value
FastReport.Olap.Types.UShortValue -> public System.UInt16 Value
FastReport.Olap.Slice.MeasureCell -> public FastReport.Olap.Utils.Variant Value
Deprecated methods. Replaced with compatible methods, but instead of the Variant type, data boxing is now used via Object, which allows passing not values with memory copying, but a reference to an object.
Click here to expand
FastReport.Olap.Types.BoolDTP -> public FastReport.Olap.Types.BoolValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ByteDTP -> public FastReport.Olap.Types.ByteValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public T VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DateTimeDTP -> public FastReport.Olap.Types.DateTimeValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DecimalDTP -> public FastReport.Olap.Types.DecimalValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.DoubleDTP -> public FastReport.Olap.Types.DoubleValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.FloatDTP -> public FastReport.Olap.Types.FloatValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.IntDTP -> public FastReport.Olap.Types.IntValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.LongDTP -> public FastReport.Olap.Types.LongValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.Range -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.Ranges -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.SByteDTP -> public FastReport.Olap.Types.SByteValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ShortDTP -> public FastReport.Olap.Types.ShortValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.StringDTP -> public FastReport.Olap.Types.StringValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.TimeSpanDTP -> public FastReport.Olap.Types.TimeSpanValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.UIntDTP -> public FastReport.Olap.Types.UIntValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.ULongDTP -> public FastReport.Olap.Types.ULongValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Types.UShortDTP -> public FastReport.Olap.Types.UShortValue VariantToValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Slice.AxisContainer -> public FastReport.Olap.Utils.Variant GetValue(System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, FastReport.Olap.Utils.Variant)
FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32)
FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValue(System.Int32)
FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValueFromRecord(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(FastReport.Olap.Utils.Variant, System.Boolean)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, System.Int32)
FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant&)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetValue(System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(FastReport.Olap.Utils.Variant)
FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetTotalValueForDims(System.String)
FastReport.Olap.Code.Measures -> public FastReport.Olap.Utils.Variant GetDetailValue(System.Int32, System.String)
Deprecated properties. The following properties have been replaced by using boxing instead of the Variant type:
Click here to expand
FastReport.Olap.Types.BoolValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DateTimeValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DecimalValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.DoubleValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.FloatValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.IntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.LongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant HighRange { public get; public set; }
FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant LowRange { public get; public set; }
FastReport.Olap.Types.SByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.StringValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.TimeSpanValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.UIntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.ULongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Types.UShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
FastReport.Olap.Slice.CalculateMeasureEventArgs -> FastReport.Olap.Utils.Variant Data { public get; public set; }
FastReport.Olap.Slice.CalculateValueEventArgs -> FastReport.Olap.Utils.Variant Value { public get; public set; }
FastReport.Olap.Slice.SliceField -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.ContainerFieldItem -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.Dimension -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
FastReport.Olap.Code.Dimensions -> FastReport.Olap.Utils.Variant DetailValue { public get; }
FastReport.Olap.Code.Measure -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
Deprecated Types. The following types are deprecated and have been removed entirely because they are no longer used.
FastReport.Olap.Utils.Variant
FastReport.Olap.Types.IVariantable
FastReport.Olap.Types.UnAssigned
The new delegates replace the old ones, which used the Variant type.
FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, System.Object, System.Object, System.Int32)
FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, System.Object, System.Int32)
FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], System.Object[], System.Int32)
The new field replaces the existing ones, now boxing via Object is used instead of the Variant type.
FastReport.Olap.Slice.MeasureCell -> public System.Object Value
The new methods replaced the old ones, which used the Variant type. Now, boxing is used instead, and data is transferred by reference, not by value, which has significantly increased the speed.
Click here to expand
FastReport.Olap.Types.Range -> public System.Boolean Match(System.Object)
FastReport.Olap.Types.Ranges -> public System.Boolean Match(System.Object)
FastReport.Olap.Slice.AxisContainer -> public System.Object GetValue(System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, System.Object)
FastReport.Olap.Slice.Slice -> public System.Object CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
FastReport.Olap.Slice.Slice -> public System.Object GetMeasureValue(System.Int32, System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValue(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValueFromRecord(System.Int32)
FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, System.Object&)
FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(System.Object, System.Boolean)
FastReport.Olap.Cube.BaseDataReaderDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.BaseDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(System.Object)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, System.Int32)
FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, System.Object&)
FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, System.Object&)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, System.Object)
FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, System.Object)
FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.IBaseDataSet -> public System.Object GetValue(System.Int32)
FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByOrder(System.Int32)
FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByValueId(System.Int32)
FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetValue(System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetTotalValueForDims(System.Int32, System.String)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Int32)
FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Object)
FastReport.Olap.Code.Measure -> public System.Object GetTotalValueForDims(System.String)
FastReport.Olap.Code.Measures -> public System.Object GetDetailValue(System.Int32, System.String)
New properties have replaced or expand the deprecated ones:
Click here to expand
FastReport.Olap.Types.BoolValue -> System.Boolean Value { public get; public set; }
FastReport.Olap.Types.ByteValue -> System.Byte Value { public get; public set; }
FastReport.Olap.Types.DateTimeValue -> System.DateTime Value { public get; public set; }
FastReport.Olap.Types.DecimalValue -> System.Decimal Value { public get; public set; }
FastReport.Olap.Types.DoubleValue -> System.Double Value { public get; public set; }
FastReport.Olap.Types.FloatValue -> System.Single Value { public get; public set; }
FastReport.Olap.Types.IntValue -> System.Int32 Value { public get; public set; }
FastReport.Olap.Types.LongValue -> System.Int64 Value { public get; public set; }
FastReport.Olap.Types.Range -> System.Object HighRange { public get; public set; }
FastReport.Olap.Types.Range -> System.Object LowRange { public get; public set; }
FastReport.Olap.Types.SByteValue -> System.SByte Value { public get; public set; }
FastReport.Olap.Types.ShortValue -> System.Int16 Value { public get; public set; }
FastReport.Olap.Types.StringValue -> System.String Value { public get; public set; }
FastReport.Olap.Types.TimeSpanValue -> System.TimeSpan Value { public get; public set; }
FastReport.Olap.Types.UIntValue -> System.UInt32 Value { public get; public set; }
FastReport.Olap.Types.ULongValue -> System.UInt64 Value { public get; public set; }
FastReport.Olap.Types.UShortValue -> System.UInt16 Value { public get; public set; }
FastReport.Olap.Slice.CalculateMeasureEventArgs -> System.Object Data { public get; public set; }
FastReport.Olap.Slice.CalculateValueEventArgs -> System.Object Value { public get; public set; }
FastReport.Olap.Slice.SliceField -> System.Object CurrentValue { public get; }
FastReport.Olap.Format.CustomFormat -> System.String DefaultFormatValue { public get; public set; }
FastReport.Olap.Code.ContainerFieldItem -> System.Object CurrentValue { public get; }
FastReport.Olap.Code.Dimension -> System.Object CurrentValue { public get; }
FastReport.Olap.Code.Dimensions -> System.Object DetailValue { public get; }
FastReport.Olap.Code.Measure -> System.Object CurrentValue { public get; }
New types:
FastReport.Olap.Utils.VMath - replaced the Variant type, now mathematics occurs through invariant calculations using boxing and type conversion.
FastReport.Olap.Types.IValueStruct``1<T> - interface for implementing own boxing type.
FastReport.Olap.Types.SimpleCompareAction - enumeration for types of invariant mathematics actions.
Changes for FastCube WinForms and FastCube Mono
The deprecated field has been replaced with a technically compatible one.
FastReport.Olap.Controls.SizingInfo -> public FastReport.Olap.Utils.Variant Data
New field:
FastReport.Olap.Controls.SizingInfo -> public System.Int32 Data
Since April 1, 2025, there will be a licensing option available for FastReport .NET and FastReport VCL.
The "Business" license is designed for teams of developers from 5 to 12 people, which is a perfect fit when the "Team" license is too small and the "Site" is excessive.
What else is included in the new license option?
Personal manager
Priority support
Build server
Access to knowledge base and products webinars
Early access to special offers
Personal discount and preferential terms for the subscription renewal
Access for up to 12 developers at one geographic address
Available in 32 languages
Documentation in 2 languages: English and German
Choose the one that suits you the best
Full price list
We are pleased to announce the release of a cross-platform library for executing complex scripts in C# called FastScript .NET.
Libraries for executing complex scripts provide the ability to dynamically generate and execute code, which can be useful in various scenarios such as developing plugins, creating user scripts, and so on.
Working in Constrained Environments. FastScript .NET is built on the classic "lexer-parser-interpreter" model. It does not use compilation to machine code, allowing it to operate in environments where code generation is restricted (NativeAOT, iOS, WASM). Its performance is comparable to other solutions that use interpretation (such as Lua and JavaScript), although it is slower than compiled C# code.
C# as a Scripting Language. FastScript .NET has full integration with the .NET platform and allows the use of all libraries, frameworks, and APIs. A unified code base in C# for scripts eliminates the need to maintain code in multiple languages.
Compactness. The small size of the library (just 300 KB) makes it convenient to use even in resource-constrained projects without overloading the system.
Since version 2025.1.21 FastScript .NET is part of the WinForms, WPF, WEB, Mono and Avalonia packages. Our library is also part of Ultimate.NET solutions with all source codes.
Learn more
We are gifting a 50% discount on FastReport .NET and VCL Team and Site licenses to users with an expired subscription. Until March 31 get access to new features, an improved designer, and support for half the price, even if your grace period is over!
We release updates twice a year, so an active subscription guarantees support for the latest versions of environments, reports with constantly improved functionality and interface, access to technical support, and much more.
Contact us to replace your outdated license with a new one!
To celebrate the occasion, we invite you to get the FastReport VCL Ultimate edition with a notable discount of 30%. It's a great opportunity to get a great deal on the most extensive type of reporting tool with a source code, cross-platform tools, and OLAP features!
Don't miss your chance on February 13 and 14 to save from $390 and provide your application with:
Source code
Report designer with dialog forms
Client-server components for VCL and Lazarus
Report creation for VCL, FMX and Lazarus
Converters from Quick Report, Report Builder, Rave Reports
Support for exporting templates to other data formats
Multidimensional analysis system FastCube for VCL, Lazarus and FMX
Flexible and open architecture with support for custom report objects
Storing finished documents in cloud storage Google Drive, Next Cloud, OneDrive, Amazon S3, Outlook, Gmail
FastScript and FastQueryBuilder included
Freeze your discount and pay later!
The offer is valid till 11.59 pm of February 14. If for some reason you can't make payment until this time, contact us and freeze your discount for 6 days to pay later!