From d0c202d0e1f011406a72f76c462ede76a2e8af19 Mon Sep 17 00:00:00 2001 From: Elena Khamlyuk Date: Wed, 18 Mar 2026 17:05:53 +0200 Subject: [PATCH 1/5] add readme content --- .../GridMasterDetailExport.csproj | 6 +- README.md | 122 ++++++++++++++++-- result.png | Bin 0 -> 78272 bytes 3 files changed, 112 insertions(+), 16 deletions(-) create mode 100644 result.png diff --git a/CS/GridMasterDetailExport/GridMasterDetailExport.csproj b/CS/GridMasterDetailExport/GridMasterDetailExport.csproj index 04b014a..28ed954 100644 --- a/CS/GridMasterDetailExport/GridMasterDetailExport.csproj +++ b/CS/GridMasterDetailExport/GridMasterDetailExport.csproj @@ -5,8 +5,8 @@ enable - - - + + + diff --git a/README.md b/README.md index 520aee9..c5fc86f 100644 --- a/README.md +++ b/README.md @@ -4,31 +4,127 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# Product/Platform - Task +# Blazor Grid - Export Detail Views -This is the repository template for creating new examples. Describe the solved task here. +The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export data](https://docs.devexpress.com/Blazor/404338/components/grid/export) to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports for Web](https://www.devexpress.com/subscriptions/reporting/web/). -Put a screenshot that illustrates the result here. +![Blazor Grid - Export detail views](result.png) -Then, add implementation details (steps, code snippets, and other technical information in a free form), or add a link to an existing document with implementation details. +## Implementation Details + +The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.DetailRowTemplate#master-detail-grid). The built-in export engine exports only column captions and data cell values, and excludes template content. To include detail Grid data to the export, create an intermediate report with the required information and export that report to the resulting document. + +### Collect Row Information + +1. Create a collection of visible columns in master and details Grids (using the [GetVisibleColumns](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.GetVisibleColumns) method): + + ```charp + private static string[] GetVisibleColumnNames(IGrid? grid) { + return grid?.GetVisibleColumns() + .OfType() + .Select(c => c.FieldName ?? c.Name).ToArray() ?? []; + } + ``` + +1. Iterate through all visible rows and determine which detail rows are expanded ([IsDetailRowExpanded](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.IsDetailRowExpanded(System.Int32)) is `true`). + + ```csharp + private Dictionary GetRowsExpandedStates() { + Dictionary masterRowExpandedStates = new(); + for(int i = 0; i < MasterGrid?.GetVisibleRowCount(); i++) { + if(MasterGrid.GetDataItem(i) is User user) { + masterRowExpandedStates[user.UserID.ToString()] + = MasterGrid.IsDetailRowExpanded(i); + } + } + return masterRowExpandedStates; + } + ``` + +1. Pass detail row information to the method that generates a report: + + ```csharp + public DxGrid? MasterGrid { get; set; } + public DxGrid? DetailGrid { get; set; } + + private XtraReport GetReport() { + return ReportGenerationHelpers.GetReportFromDxGrid( + GetVisibleColumnNames(MasterGrid), + GetVisibleColumnNames(DetailGrid), + GetRowsExpandedStates() + ); + } + ``` + +### Generate a Report + +1. [Create a report](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L37) that uses Grid data. In this method, you can [customize appearance](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L22) of the resulting document. + + ```csharp + public static XtraReport GetReportFromDxGrid(string[] masterColumnNames, string[] detailColumnNames, Dictionary rowExpandedStates) { + XtraReport report = new XtraReport() { + ReportUnit = ReportUnit.HundredthsOfAnInch, + PaperKind = DXPaperKind.Letter, + Margins = new DXMargins(100, 100, 100, 100) + }; + // ... + return report; + } + ``` + + Refer to the following file to review the full implementation: [ReportGenerationHelpers.cs](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs). + +### Download the Resulting Document + +1. Implement a [JavaScript function](./CS/GridMasterDetailExport/wwwroot/scripts/DownloadHelper.js) that initiates the file download: + + ```js + async function downloadFileFromStream(fileName, contentStreamReference) { + const arrayBuffer = await contentStreamReference.arrayBuffer(); + const blob = new Blob([arrayBuffer]); + const url = URL.createObjectURL(blob); + const anchorElement = document.createElement('a'); + anchorElement.href = url; + anchorElement.download = fileName ?? ''; + anchorElement.click(); + anchorElement.remove(); + URL.revokeObjectURL(url); + } + ``` + +1. In Grid's `ExportToCsvAsync`/`ExportToXlsxAsync`/`ExportToPdfAsync` method, call the JavaScript function to download the file: + + ```csharp + private async Task ExportToPdf() { + using var report = GetReport(); + using var stream = new MemoryStream(); + await report.ExportToPdfAsync(stream); + await DownloadStreamAsync(stream, "exportResult.pdf"); + } + async Task DownloadStreamAsync(Stream stream, string fileName) { + stream.Seek(0, SeekOrigin.Begin); + using var streamRef = new DotNetStreamReference(stream); + await JS.InvokeVoidAsync("downloadFileFromStream", fileName, streamRef); + } + ``` ## Files to Review -- link.cs (VB: link.vb) -- link.js -- ... +- [Index.razor](./CS/GridMasterDetailExport/Components/Pages/Index.razor) +- [ReportGenerationHelpers.cs](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs) +- [DownloadHelper.js](./CS/GridMasterDetailExport/wwwroot/scripts/DownloadHelper.js) ## Documentation -- link -- link -- ... +- [Export Data in Blazor Grid](https://docs.devexpress.com/Blazor/404338/components/grid/export) +- [Printing and Export in Reporting Tools for Web](https://docs.devexpress.com/XtraReports/404502/web-reporting/common-features/printing?p=netframework) ## More Examples -- link -- link -- ... +- [Blazor Grid - Export Images/Rich Text Using Spreadsheet Document APIs](https://github.com/DevExpress-Examples/blazor-grid-export-images-and-rich-text-using-office-file-api) +- [Blazor Grid - How to Export Data to DOCX, HTML, and MHT formats in a server application](https://github.com/DevExpress-Examples/blazor-server-grid-export) +- [Blazor Grid - How to Export Data to DOCX, HTML, and MHT formats in a WebAssembly application](https://github.com/DevExpress-Examples/blazor-webassembly-grid-export) + ## Does This Example Address Your Development Requirements/Objectives? diff --git a/result.png b/result.png new file mode 100644 index 0000000000000000000000000000000000000000..96dbb9dc6fbd2a9af2dc20f787b52e121bef3e31 GIT binary patch literal 78272 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 Date: Thu, 19 Mar 2026 11:32:37 +0200 Subject: [PATCH 2/5] add reports-related links --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c5fc86f..8aaec2c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ # Blazor Grid - Export Detail Views -The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export data](https://docs.devexpress.com/Blazor/404338/components/grid/export) to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports for Web](https://www.devexpress.com/subscriptions/reporting/web/). +The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export data](https://docs.devexpress.com/Blazor/404338/components/grid/export) to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports](https://www.devexpress.com/subscriptions/reporting/web/). ![Blazor Grid - Export detail views](result.png) @@ -58,7 +58,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http ### Generate a Report -1. [Create a report](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L37) that uses Grid data. In this method, you can [customize appearance](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L22) of the resulting document. +1. [Create a report](https://docs.devexpress.com/XtraReports/115726/feature-guide-to-devexpress-reports/reporting-api/create-reports-in-code) that [uses Grid data](https://docs.devexpress.com/XtraReports/15034/feature-guide-to-devexpress-reports/bind-reports-to-data#data-source-types-runtime). In this method, you can [customize appearance](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L22) of the resulting document. ```csharp public static XtraReport GetReportFromDxGrid(string[] masterColumnNames, string[] detailColumnNames, Dictionary rowExpandedStates) { @@ -117,7 +117,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http ## Documentation - [Export Data in Blazor Grid](https://docs.devexpress.com/Blazor/404338/components/grid/export) -- [Printing and Export in Reporting Tools for Web](https://docs.devexpress.com/XtraReports/404502/web-reporting/common-features/printing?p=netframework) +- [Export Reports](https://docs.devexpress.com/XtraReports/1302/feature-guide-to-devexpress-reports/store-and-distribute-reports/export-reports) ## More Examples From 4ee5624b9faa29646b095853496eb08363243a1d Mon Sep 17 00:00:00 2001 From: Elena Khamlyuk <80813840+khamlyuk@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:46:54 +0200 Subject: [PATCH 3/5] Apply suggestions from code review Co-authored-by: Vladimir Abadzhev --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 8aaec2c..4df5f65 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,17 @@ # Blazor Grid - Export Detail Views -The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export data](https://docs.devexpress.com/Blazor/404338/components/grid/export) to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports](https://www.devexpress.com/subscriptions/reporting/web/). +The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export](https://docs.devexpress.com/Blazor/404338/components/grid/export) master view data to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports](https://www.devexpress.com/subscriptions/reporting/web/). ![Blazor Grid - Export detail views](result.png) ## Implementation Details -The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.DetailRowTemplate#master-detail-grid). The built-in export engine exports only column captions and data cell values, and excludes template content. To include detail Grid data to the export, create an intermediate report with the required information and export that report to the resulting document. +To set up a grid with a master-detail layout, specify a [DetailRowTemplate](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.DetailRowTemplate#master-detail-grid). Note that the built-in export engine exports master view data only: column captions and data cell values. Export excludes template content. To export detail data, create an intermediate master-detail report and export that report to required format. ### Collect Row Information -1. Create a collection of visible columns in master and details Grids (using the [GetVisibleColumns](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.GetVisibleColumns) method): +1. Create visible column collections for master and detail grids. Use the [GetVisibleColumns](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.GetVisibleColumns) method: ```charp private static string[] GetVisibleColumnNames(IGrid? grid) { @@ -26,7 +26,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http } ``` -1. Iterate through all visible rows and determine which detail rows are expanded ([IsDetailRowExpanded](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.IsDetailRowExpanded(System.Int32)) is `true`). +1. Iterate through all master rows and determine which of them are expanded ([IsDetailRowExpanded](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.IsDetailRowExpanded(System.Int32)) is `true`). ```csharp private Dictionary GetRowsExpandedStates() { @@ -41,7 +41,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http } ``` -1. Pass detail row information to the method that generates a report: +1. Pass all previously collected information to the method that generates a report: ```csharp public DxGrid? MasterGrid { get; set; } @@ -58,7 +58,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http ### Generate a Report -1. [Create a report](https://docs.devexpress.com/XtraReports/115726/feature-guide-to-devexpress-reports/reporting-api/create-reports-in-code) that [uses Grid data](https://docs.devexpress.com/XtraReports/15034/feature-guide-to-devexpress-reports/bind-reports-to-data#data-source-types-runtime). In this method, you can [customize appearance](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L22) of the resulting document. +1. Declare a method that accepts grid layout information. [Create a report](https://docs.devexpress.com/XtraReports/115726/feature-guide-to-devexpress-reports/reporting-api/create-reports-in-code) and [bind it to data](https://docs.devexpress.com/XtraReports/15034/feature-guide-to-devexpress-reports/bind-reports-to-data#data-source-types-runtime). [Customize report appearance](./CS/GridMasterDetailExport/Reports/ReportGenerationHelpers.cs#L22) as your needs dictate. ```csharp public static XtraReport GetReportFromDxGrid(string[] masterColumnNames, string[] detailColumnNames, Dictionary rowExpandedStates) { @@ -76,7 +76,7 @@ The Blazor Grid creates master-detail layouts using the [DetailRowTemplate](http ### Download the Resulting Document -1. Implement a [JavaScript function](./CS/GridMasterDetailExport/wwwroot/scripts/DownloadHelper.js) that initiates the file download: +1. Implement a [JavaScript function](./CS/GridMasterDetailExport/wwwroot/scripts/DownloadHelper.js) that initiates file download: ```js async function downloadFileFromStream(fileName, contentStreamReference) { From be5e251a76ad4f8f94da14fb08189d7826c1da5c Mon Sep 17 00:00:00 2001 From: Elena Khamlyuk <80813840+khamlyuk@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:51:19 +0200 Subject: [PATCH 4/5] Apply suggestions from code review Co-authored-by: Vladimir Abadzhev --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4df5f65..27aebac 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ To set up a grid with a master-detail layout, specify a [DetailRowTemplate](http } ``` -1. In Grid's `ExportToCsvAsync`/`ExportToXlsxAsync`/`ExportToPdfAsync` method, call the JavaScript function to download the file: +1. Instead of calling the grid's `ExportToCsvAsync`/`ExportToXlsxAsync`/`ExportToPdfAsync` method, call the JavaScript function to download the exported file: ```csharp private async Task ExportToPdf() { From 5971eb6178ae19910fb6d08c27aaafba0a287ab1 Mon Sep 17 00:00:00 2001 From: Elena Khamlyuk Date: Tue, 24 Mar 2026 10:29:46 +0200 Subject: [PATCH 5/5] Ray review --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 27aebac..196041d 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ # Blazor Grid - Export Detail Views -The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export](https://docs.devexpress.com/Blazor/404338/components/grid/export) master view data to multiple formats: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views to the resulting document using [DevExpress Reports](https://www.devexpress.com/subscriptions/reporting/web/). +The [DevExpress Blazor Grid](https://docs.devexpress.com/Blazor/403143/components/grid) allows you to [export](https://docs.devexpress.com/Blazor/404338/components/grid/export) master view data to multiple file formats, including: PDF, CSV, XLS, and XLSX. This example extends built-in functionality and exports detail views (generates a document) using [DevExpress Reports](https://www.devexpress.com/subscriptions/reporting/web/). ![Blazor Grid - Export detail views](result.png) ## Implementation Details -To set up a grid with a master-detail layout, specify a [DetailRowTemplate](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.DetailRowTemplate#master-detail-grid). Note that the built-in export engine exports master view data only: column captions and data cell values. Export excludes template content. To export detail data, create an intermediate master-detail report and export that report to required format. +To set up a grid with a master-detail layout, specify a [DetailRowTemplate](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.DetailRowTemplate#master-detail-grid). Note that our built-in export engine exports master view data only: column captions and data cell values. Export excludes template content. To export detail data, create an intermediate master-detail report and export that report to a desired file format. ### Collect Row Information