v25.1 Release Notes
- 16 minutes to read
Tip
Visit our website to explore the latest features across the DevExpress product line: What’s New in the Latest Version.
License Keys — New in v25.1
This new release requires every developer/build machine to store a DevExpress license key associated with your account.
DevExpress Unified Installer (Windows) automatically obtains your License Key and places it into its correct location. Run the installer in Repair/Register mode to update your key when necessary. If you used our Unified Installer before license keys were introduced (prior to v25.1), you should not experience any changes when installing or updating DevExpress products.
If you bypass the DevExpress Unified Installer, you can download your license key and register it in the system manually (via a file on disk or an environment variable). Review detailed instructions in the following help topic: Online NuGet Feeds, CI/CD, and Other Installation Methods (Windows, macOS, Linux).
AI-powered Extensions
The features/capabilities described in this section apply to the following:
- WinForms End-User Report Designer
- WinForms Document Viewer
- Blazor Native Report Viewer
- ASP.NET Core/Blazor/Angular/React End-User Report Designer
- ASP.NET Core/Blazor/Angular/React Document Viewer
To add these capabilities to your DevExpress-powered app - regardless of selected AI service - you must register a chat client at runtime.
For WinForms apps, add the DevExpress Behavior Manager component from the Toolbox onto a Form with the DevExpress End-User Report Designer and attach appropriate behaviors. Learn more about AI-powered Behaviors in the following help topic: Create and Configure AI Assistant Behaviors.
For ASP.NET Core and Blazor apps, use the following extension methods at application startup (based on components used):
- For our JavaScript-based Report Designer and Document Viewer, call the AddWebReportingAIIntegration method.
- For our native Report Viewer for Blazor, call the AddBlazorReportingAIIntegration method.
Note
DevExpress does not offer a REST API or ship any built-in LLMs/SLMs. Instead, we follow the BYOL (“bring your own license”) principle. To use these features, you need to have an active AI service subscription (e.g., Azure, Open AI, Anthropic Claude, Google Gemini, Mistral AI, etc.) and obtain the REST API endpoint, key, and model deployment name. These variables must be specified at runtime to incorporate/use DevExpress AI-powered Extensions in your application.
Report Designer — Create AI-powered Reports using our Report Wizard (CTP)
The DevExpress Report Wizard now includes an AI-powered report generation option that uses natural language processing to build reports based on text descriptions.
To activate this feature in your DevExpress-powered WinForms app, use the ReportPromptToReportBehavior:
For apps using the DevExpress Web Report Designer, call the AddPromptToReportConverter method at application startup:
builder.Services.AddDevExpressAI(config => {
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddPromptToReportConverter();
});
});
After activation, the Report Wizard interface displays a new AI Prompt-to-Report option:
AI-powered report generation works with two data source options:
- No Data Source
- Creates a complete report structure based only on the user’s natural language description.
- Add Data Source
- Allows users to create a report data source in the first step, displays the data source structure in the Report Wizard interface, and automatically includes this metadata in the LLM prompt. This allows users to reference available data source fields as they create data-bound report elements.
Our Report Wizard interface includes a prompt input area with placeholder fields that guide users toward detailed prompts. Output quality depends on the specificity of the natural language description. Users should include detailed information about layout preferences, calculations, grouping requirements, and visualization types. Like other LLM implementations, the system has limitations and may need modification to meet precise requirements. We also include built-in prompt suggestions to demonstrate effective patterns/functionality so you can configure your own predefined prompts:
Configure Predefined Prompts
You can customize the predefined prompt list through our APIs and align output with specific domain requirements/internal reporting standards:
WinForms
Use the ReportPromptToReportBehaviorProperties.PredefinedPrompts property at design-time, or add to the collection at runtime as follows:
using DevExpress.AIIntegration.Reporting;
behaviorManager1.Attach<ReportPromptToReportBehavior>(reportDesigner1, behavior => {
behavior.Properties.PredefinedPrompts = new[] {
new AIReportPrompt() {Text = "Prompt1", Title = "ReportName1"},
new AIReportPrompt() {Text = "Prompt2", Title = "ReportName2"}
};
});
ASP.NET Core/Blazor
Use the ConfigurePredefinedPrompts method to modify predefined prompt collection:
using DevExpress.AspNetCore.Reporting;
using DevExpress.AIIntegration.Reporting;
//...
builder.Services.AddDevExpressAI(config => {
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddPromptToReportConverter(x => {
x.ConfigurePredefinedPrompts(prompts => {
prompts.Add(new AIReportPrompt() {
Text = "Your Prompt Goes Here..",
Title = "The Report Name Goes Here"
});
});
});
});
});
// ...
Modify Report Generation Process
Use the following properties/methods to manage AI-powered report generation (note that time delays may occur when these properties remain active):
WinForms
RetryAttemptCount
— Defines the number of attempts to fix report layout errors that appear in the LLM response.FixLayoutErrors
— Determines whether to automatically resolve report control overlapping.
ASP.NET Core/Blazor
SetRetryAttemptCount
— Defines the number of attempts to fix report layout errors that appear in the LLM response.FixLayoutErrors
— Determines whether to automatically resolve report control overlapping.
To learn more about the AI-generated report process, please review the following video:
WinForms End-User Report Designer
ASP.NET Core/Blazor Report Designer
Report Designer — Modify Reports using AI (CTP)
The WinForms End-User Report Designer for .NET now allows you to add and modify report elements through the AI Assistant Chat window using natural language. You can execute commands such as:
- Add/remove report controls (labels, tables, barcodes, etc.)
- Add/remove report bands
- Find report controls by name and modify associated properties (text, expression binding, backcolor and forecolor, etc.)
- Group report data
- Filter report data
- Modify report properties (margins, paper kind, etc.)
- And more…
To incorporate this feature in your DevExpress-powered WinForms app, use the ReportModifyBehavior
:
The ReportModifyBehavior
ships with the following properties:
RetryAttemptCount
- Defines the number of attempts to fix modification errors that appear in the LLM response and incorrectly apply to a report control.
FixLayoutErrors
- Determines whether to automatically resolve report control overlapping.
To learn more about our AI-powered report modification process, please review the following video:
Since our integrated Chat window leverages the DevExpress Blazor AI Chat control (embedded within WebView), this feature will only work in .NET. To explore this feature in greater detail, please navigate to our demos and…
- Open the DevExpress WinForms demo app.
Right-click the AI-powered Report Designer demo in the AI Integration section and select Open C# Solution (.NET):
Build and run the solution to see the AI Chat control in action.
Highly recommended. You should update the following code to add your AI service credentials. Our demo credentials are rate limited.
AzureOpenAIClient azureOpenAIClient = new AzureOpenAIClient(AzureOpenAIEndpointUri, AzureOpenAIKeyCredentials, new AzureOpenAIClientOptions() {
Transport = new PromoteHttpStatusErrorsPipelineTransport()
});
IChatClient chatClient = azureOpenAIClient.GetChatClient("GPT4o").AsIChatClient();
Report Designer — Localize Reports using AI
The DevExpress Report Designer now features AI-powered report localization. Once activated, the Localization Editor displays a new “Localize with AI” button that automatically collects all static strings within a report and sends them to your AI service of choice for translation.
To activate this feature in your DevExpress-powered WinForms app, use the `ReportLocalizationBehavior
For ASP.NET Core/Blazor apps, call the AddLocalization method at application startup:
using DevExpress.AspNetCore.Reporting;
//...
builder.Services.AddDevExpressAI(config => {
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddLocalization();
});
});
Review the following videos to learn more:
ASP.NET Core/Blazor Report Designer
WinForms End-User Report Designer
Report Designer — Print Preview with AI-generated Test Data
The DevExpress Report Designer allows you to leverage LLMs and generate test data using a data source schema and/or expression bindings defined for report controls.
This will be of value if you design your report and wish to quickly check recent changes without access to a real data source. It also allows report creators to share report documents without including actual data.
For ASP.NET Core/Blazor apps, call the AddTestDataSource method at application startup:
using DevExpress.AspNetCore.Reporting;
// ...
builder.Services.AddDevExpressAI(config => {
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddTestDataSource(x => {
x.SetRowCount(15);
});
});
});
Once you activate this AI-powered capability, a Smart Preview ✨ button appears next to the standard Preview button. When clicked, the report designer first asks the LLM to generate sample data using a schema and then creates a report document with this data.
Review the following DevExpress ASP.NET Core Report Designer video to learn more:
Report Designer — Create Expressions with Natural Language
The DevExpress Report Designer allows you to generate Criteria Language expressions with AI assistance, within both the DevExpress Expression Editor and Filter Editor.
For ASP.NET Core/Blazor apps, call the AddPromptToExpressionConverter method at application startup:
using DevExpress.AspNetCore.Reporting;
// ...
builder.Services.AddDevExpressAI(config => {
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddPromptToExpressionConverter();
});
});
Once activated, both the Filter and Expression Editor will display an AI button ✨ (opens a window allowing users to input natural language prompts and apply generated expressions).
Report Viewer — AI-powered Inline Report Translation
The Web Document Viewer and WinForms Report Viewer now include a new “Translate Inline” option in our AI context menu. This feature translates selected content directly within the preview.
To activate this feature in your DevExpress-powered WinForms app, use the DocumentTranslateInlineBehavior
:
For ASP.NET Core/Blazor apps, call the AddTranslation
method at application startup:
using DevExpress.AspNetCore.Reporting;
// ...
builder.Services.AddDevExpressAI(config => {
// Use the config.AddBlazorReportingAIIntegration for Native Report Viewer for Blazor.
config.AddWebReportingAIIntegration(aiConfig => {
aiConfig.AddTranslation(translationOptions =>
translationOptions.SetLanguages(new List<LanguageInfo> {
new LanguageInfo {
Text = "Italian",
Id = "it-IT"
}
})
.EnableInlineTranslation()
.EnableTranslation());
});
});
DevExpress Report Viewers also include an option to print/export translated content (with a notification about AI-generated content before processing).
This enhancement builds upon our AI-powered translation functionality (detailed in What’s New in v24.2). While the original feature displays translations in a separate AI Operations panel, this new option allows users to translate report content directly within the preview and print/export the translated document.
Note that report content appears using fixed-size text bricks, which do not yet adjust dynamically for longer translations. For example, German words tend to be longer than English equivalents and the resulting brick may contain cropped text. For users who need to translate an entire document to review content or copy text in its entirety, we recommend using the AI-powered translation panel instead. Consult the following video for additional information:
Accessibility
Export to PDF — Table of Contents
We extended our PDF Export engine to generate an accessible-compliant table of contents (TOC). The XRTableOfContents
automatically creates the table of contents based on bookmarks assigned to report elements. The TOC in the resulting PDF file builds with properly tagged headings and bookmarks.
DevExpress Visual Studio Report Designer for .NET
Startup Enhancements & Performance Optimizations
We improved the inter-process communication layer between Visual Studio and the external Report Designer process.
Our Visual Studio Report Designer offers enhanced responsiveness during startup as it now executes most communication-related operations asynchronously. We also optimized logging operations - all logs are now written directly to the Visual Studio output window without invoking the UI thread (to eliminate performance bottlenecks).
Additionally, we optimized the preparation of solution output files for external designer processes to reduce time spent on I/O operations.
The following tables demonstrate performance test results.
Cold Start Time Measurements
Project | Output Size | v24.2 | v25.1 | Time Diff |
---|---|---|---|---|
Project1 | 57 Mb | 00:00:00.052 | 00:00:00.024 | 53.34% |
Project2 | 60 Mb | 00:00:00.045 | 00:00:00.012 | 74.26% |
Project3 | 150 Mb | 00:00:00.125 | 00:00:00.027 | 78.71% |
Project4 | 2700 Mb | 00:00:02.942 | 00:00:00.355 | 87.94% |
Designer Restart After Rebuild Measurements
Project | Output Size | v24.2 | v25.1 | Time Diff |
---|---|---|---|---|
Project1 | 57 Mb | 00:00:00.045 | 00:00:00.011 | 75.44% |
Project2 | 60 Mb | 00:00:00.039 | 00:00:00.008 | 78.91% |
Project3 | 150 Mb | 00:00:00.0978852 | 00:00:00.0138932 | 85.81% |
Project4 | 2700 Mb | 00:00:02.735 | 00:00:00.091 | 96.67% |
All Platforms
Label and Table Cell Text Formatting — Line Spacing
XRLabel
and XRTableCell
report controls allow users to define the spacing between lines of text (LineSpacing). This setting improves readability and gives users greater control over individual report layouts. Users can directly modify line spacing for basic report controls to improve multi-line text clarity and reduce the memory footprint associated with the XRRichText
control. The following screenshot is of two XRLabels with different line spacing applied:
Detailed Control Over Report Element Export Operations (to Different Formats)
The XRControl.CanPublishOptions property allows you to limit the list of export formats wherein a report control should appear after an export operation. In addition, you can use this new property to prohibit the printing of a specific report control(s).
The following code snippet excludes page information (the XRPageInfo instance) when exporting a report to XLS, XLSX, and CSV formats:
using DevExpress.XtraReports.UI;
// ...
XtraReport report = new XtraReport();
DetailBand detailBand = new DetailBand();
report.Bands.Add(detailBand);
XRPageInfo xrPageInfo1 = new XRPageInfo{
// Add content.
};
detailBand.Controls.Add(xrPageInfo1);
// Hide xrPageInfo1 from XLS, XLSX, and CSV formats.
xrPageInfo1.CanPublishOptions.Xlsx = false;
xrPageInfo1.CanPublishOptions.Xls = false;
xrPageInfo1.CanPublishOptions.Csv = false;
You can also specify CanPublishOptions
in the Properties grid:
The following image displays included and excluded page information:
New Report Measurement Units
We extended the ReportUnit enumeration to include Inches
and Millimeters
. Report creators can now work with measurement values directly, eliminating the need to convert hundredths or tenths to integer units (when sizing and positioning report controls). Once you change report units to new values, the properties panel will display report control size/position as float numbers within the properties panel:
Property | Hundredths of an Inch | Inch |
---|---|---|
Height | 53.2 | 0.532 |
Width | 206.8 | 2.068 |
Property | Tenths of a Millimeter | Millimeters |
---|---|---|
Height | 135.1 | 13.51 |
Width | 662.6 | 66.26 |
This change also affects XtraReport.PageHeightF and XtraReport.PageWidthF properties (which now use float instead of integer).
Reporting for Desktop
Report Designer — Proportional Report Controls Resize Operations
Report creators can now press Shift
to resize report controls with corner anchors and preserve aspect ratios both in WinForms and WPF Report Designers.
Report Designer — Drag & Drop Enhancements for Date-based Field Types
The Field List pane in the DevExpress WinForms Report Designer offers easier access to DateTime, DateOnly, and TimeOnly types used within a report’s data source. Users can now expand these fields in the Field List panel to reveal associated internal properties and seamlessly bind them to report controls.
With this enhancement, you no longer need to manually specify data formatting or use expression functions when working with internal properties: simply drag & drop these properties onto existing controls to establish new data bindings or place them on the report surface to create new data-bound controls.
To display internal date and time properties in the Field List, activate the UserDesignerOptions.ShowFieldListDateTimeComponents property at application startup or in the DevExpress Visual Studio Report Designer settings window. Doing so will expose the following properties:
- DateOnly: Month, Year, Day
- DateTime: Day, Month, Year, Hour, Minute, Second
- TimeOnly: Hour, Minute, Second
Configurable Binding Modes
This option supports two binding modes (managed via the UserDesignerOptions.DateTimeComponentBindingMode property). When a field is dropped from the Field List, the Report Designer for WinForms automatically creates an expression binding and does one of the following:
- Applies a format string (for example,
{0:%d}
,{0:%M}
) — useful for displaying formatted date/time values within a report. - Assigns an expression function (for example,
GetDay
,GetMonth
) — ideal for calculations against multiple data source fields. You can further refine expressions using the Expression Editor.
Expression Editor Integration
This enhancement also extends to the DevExpress Expression Editor, where appropriate expression functions are automatically assigned when you double-click internal type properties in the Field List.
DateOnly & TimeOnly Support — Range Report Parameters
We expanded support for DateOnly
and TimeOnly
.NET types across DevExpress Reports for WinForms. The Report Viewer can use these parameters to filter report data at the data source and report level (by date and time range).
Users can now filter reports by date range without time components or specify time range independent of date.
Use the following code snippet to create and add DateOnly
and TimeOnly
range parameters to a report at runtime:
var report = new XtraReport();
// ...
// Add the start interval value.
var p1start = new RangeStartParameter() {
Type = typeof(DateOnly),
Value = DateOnly.FromDateTime(DateTime.Today).AddDays(-7),
};
// Add the end interval value.
var p1end = new RangeEndParameter() {
Type = typeof(DateOnly),
Value = DateOnly.FromDateTime(DateTime.Today),
};
// Add the range parameter
var p1 = new Parameter() {
Type = typeof(DateOnly),
Value = DateOnly.FromDateTime(DateTime.Today),
ValueSourceSettings = new RangeParametersSettings(p1start, p1end)
};
report.Parameters.Add(p1);
// Add the start interval value.
var p2start = new RangeStartParameter() {
Type = typeof(TimeOnly),
Value = TimeOnly.FromTimeSpan(TimeSpan.FromMinutes(10)),
};
// Add the end interval value.
var p2end = new RangeEndParameter() {
Type = typeof(TimeOnly),
Value = TimeOnly.FromTimeSpan(TimeSpan.FromMinutes(30)),
};
// Add the range parameter
var p2 = new Parameter() {
Type = typeof(TimeOnly),
Value = TimeOnly.FromDateTime(DateTime.Today),
ValueSourceSettings = new RangeParametersSettings(p2start, p2end)
};
report.Parameters.Add(p2);
Range parameter editors include a customizable list of predefined ranges. Use the RangeParameterEditorOptions class to add a custom range at runtime:
RangeParameterEditorOptions.PredefinedTimeRanges.Remove("Lunch Time");
RangeParameterEditorOptions.RegisterTimeRange("MyTimeInterval", () => new TimeOnly(10, 30, 00), () => new TimeOnly(11, 30, 0));
Reporting for Web
Web Report Designer — External Drag & Drop Operations
The DevExpress Web Report Designer supports drag & drop operations from outside the browser window (making it easier to add content to your report documents):
- Image files
- Drag & drop an image file onto the report surface to create an
XRPictureBox
. - Text files
- Drop a TXT file to create an XRLabel, or drop an RTF, DOCX, or HTML file to insert anXRRichText control with associated file content.
- PDF files
- Drag & drop a PDF file to insert an XRPdfContent control.
- Existing controls
- Dropping a file onto an existing report control updates content with new file data.
Web Report Designer — Quickly Create Header Tables
The DevExpress Web Report Designer allows designers to quickly create table headers. When you design a report, select a set of data fields within the Field List, an entire query, a table, or individual fields while holding Ctrl
. To create a table with data field names, press Shift
while dragging the table onto the report design area.
Web Report Designer — Snap to Grid
The DevExpress Web Report Designer now supports Snapping to Grid, a layout feature that aligns report controls (like labels, tables, and images) to an invisible grid as you move or resize elements. This enhancement ensures consistent spacing/alignment and improves design workflows (especially for complex report layouts).
Available options are “snap to lines” and “snap to grid”.
When a report’s snapping mode is set to Snap to Grid
, the top left corner of a report control aligns with the report’s snap grid:
Standalone Report Parameters Panel for React
Our standalone Report Parameters Panel is a new React component that arranges report parameter editors. It retrieves report parameter details from a DevExpress report instance passed from the backend.
Use this component to programmatically create a report, then export or email the document without displaying a preview to the end user. The component helps reduce memory usage because it eliminates the need to generate report images in the background and transfer them to a client application.