Skip to content

Conversion Flow

How the RDLC to DevExpress conversion works.


Overview

The converter transforms RDLC reports into DevExpress REPX format automatically.

Simple view:

RDLC File → Parse → Convert → Patch → Analyze → Output Files

You don't need to understand the details - the system handles everything.


The 5 Stages

1. Parse (Read Your Report)

What happens: The RdlcParserService reads your RDLC file and extracts all controls, data sources, and parameters into an Intermediate Representation (IR).

Service: Application.Services.Parsing.RdlcParserService

You see:

Parsing Report.rdlc...
   Found 45 controls
   Found 3 datasets


2. Convert (DevExpress Tool)

What happens: The DevExpressToolConversionStrategy executes DevExpress.Reporting.Import.exe to convert basic structure and controls.

Service: Infrastructure.Conversion.Strategies.DevExpressToolConversionStrategy

Executor: Infrastructure.Execution.ResilientProcessExecutor (with retry logic)

You see:

Running DevExpress converter...
   [OK] Conversion tool completed

Auto-converted:

  • Textboxes → XRLabel
  • Images → XRPictureBox
  • Tables → XRTable
  • Lines → XRLine

3. Patch (Fix Complex Items)

What happens: The DevExpressRepxPatcher coordinates three orchestrators to fix what DevExpress can't handle automatically, then automatically configures the report for multi-dataset access if needed.

Service: Application.Services.Patching.DevExpressRepxPatcher (main coordinator)

Three orchestrators:

A. Subreport Patching

  • Orchestrator: SubreportPatchingOrchestrator
  • Finds subreport references in IR
  • Resolves files with SubreportResolverService
  • Converts with SubreportConversionOrchestrator
  • Injects XML with XmlSubreportPatcher

B. Expression Fixing

  • Orchestrator: ExpressionFixingOrchestrator
  • Finds #NOT_SUPPORTED# markers
  • Converts with ExpressionConverterService and BasicRdlcExpressionConverter
  • Analyzes multi-dataset expressions with MultiDatasetExpressionAnalyzer
  • Fixes multi-dataset field references that DevExpress import tool incorrectly converts
  • Example: Globals!PageNumber[Arguments.PageInfo.PageNumber]
  • Example: First(Fields!Name.Value, "DataSet1") + First(Fields!Name.Value, "DataSet2")[DataSet1.Name] + [DataSet2.Name]

C. Nested Tablix Patching

  • Orchestrator: NestedTablixPatchingOrchestrator
  • Handles nested tables with XmlNestedTablixPatcher
  • Extracts review info with ManualReviewInfoExtractor
  • Analyzes complexity with TableComplexityAnalyzer

D. DataMember Auto-Configuration

  • Action: Automatically clears DataMember property if multi-dataset expressions detected
  • Purpose: Enables ExpressionsAdvanced mode for [DataSet.Field] syntax
  • Benefit: No manual configuration required

You see:

Fixing expressions...
   Fixed 12 expressions
Processing subreports...
   [OK] 2 subreports converted
Analyzing tables...
   [OK] 1 complex table identified
Cleared DataMember property to enable ExpressionsAdvanced mode


4. Analyze (Check What Needs Review)

What happens: The analysis services identify items that may need your attention.

Services:

  • TableComplexityAnalyzer - Identifies complex table structures
  • ManualReviewInfoExtractor - Extracts items needing manual review

You see:

Analyzing conversion...
   [PASS] Fully converted: 42
   [WARN] Partial: 2
   [WARN] Manual review: 1


5. Package (Create Output Files)

What happens: The RepxEmitterService saves the REPX and ManualConversionGuideGenerator creates your review guide.

Services:

  • RepxEmitterService - Saves REPX files and subreports
  • ManualConversionGuideGenerator - Creates conversion guide with:
  • Detailed partial conversion reviews (controls that need verification)
  • Manual table recreation instructions (nested tables)
  • Type-specific checklists (Tablix, Table, Rectangle, Subreport, etc.)
  • Step-by-step review instructions

You see:

Creating output files in Report-converted/...
   [OK] Report.repx
   [OK] Report-conversion-guide.md (includes partial conversion details)
   [OK] Report-conversion-report.json
   [OK] subreports/


Control Mappings

RDLC DevExpress
Textbox XRLabel
Image XRPictureBox
Table XRTable
Line XRLine
Rectangle XRPanel
Subreport XRSubreport
Chart XRChart

Expression Conversions

RDLC DevExpress
Globals!PageNumber [Arguments.PageInfo.PageNumber]
Fields!Name.Value [Name]
Parameters!Date.Value ?Date
First(Fields!Total.Value, "DataSet") [Total] (single dataset)
First(Fields!Name.Value, "DataSet1") + First(Fields!Name.Value, "DataSet2") [DataSet1.Name] + [DataSet2.Name] (multi-dataset)

Timeline

Report Type Time
Simple 10-20 sec
Medium 30-60 sec
Complex 1-3 min

Output Files

All converted files are organized in a dedicated ReportName-converted/ folder to keep them separate from your original files.

Main Report (.repx)

Your converted report. Open in DevExpress Report Designer.

Conversion Guide (.md)

Step-by-step instructions for manual review items.

Conversion Report (.json)

Statistics and details (optional reference).

Subreports Folder

All converted subreports (if applicable).

Example structure:

your-project/
└── reports/
    ├── SalesReport.rdlc                  ← Original
    └── SalesReport-converted/            ← All conversion output
        ├── SalesReport.repx
        ├── SalesReport-conversion-guide.md
        ├── SalesReport-conversion-report.json
        └── subreports/
            └── Details.repx


What's Preserved

Kept:

  • Layout and positioning
  • Data bindings
  • Fonts and styles
  • Report structure

Not Migrated:

  • Actual data (you connect to your data source)
  • Custom code functions (need manual rewrite)

Next Steps After Conversion

  1. Open .repx in DevExpress Report Designer
  2. Read conversion guide
  3. Connect to data source
  4. Test with sample data
  5. Complete manual adjustments

See Also


Last Updated: December 18, 2025