Mapping Rules Guide¶
How RDLC controls and expressions are converted to DevExpress.
Control Mappings¶
Complete Table¶
| RDLC Control | DevExpress Control | Status | Notes |
|---|---|---|---|
| Textbox | XRLabel | Full | Simple text |
| Textbox (HTML) | XRRichText | Full | When MarkupType="HTML" |
| Image | XRPictureBox | Full | All sources |
| Line | XRLine | Full | Horizontal/vertical |
| Rectangle | XRPanel | Full | Container |
| Table | XRTable | Partial | Simple→full, complex→review |
| Tablix | XRTable | Partial | Groupings may need config |
| List | XRPanel | Partial | Data binding may need adjust |
| Subreport | XRSubreport | Full | Custom patching |
| Chart | XRChart | Partial | Series may need config |
Status:
- Full = Ready to use
- Partial = Works but may need tweaking
Expression Mappings¶
Global Variables¶
| RDLC | DevExpress |
|---|---|
Globals!PageNumber |
[Arguments.PageInfo.PageNumber] |
Globals!TotalPages |
[Arguments.PageInfo.PageCount] |
Globals!ExecutionTime |
[Arguments.PageInfo.ExecutionTime] |
Globals!ReportName |
[Arguments.ReportName] |
Field References¶
| RDLC | DevExpress | Notes |
|---|---|---|
Fields!Name.Value |
[Name] |
Simple field |
First(Fields!Name.Value, "DataSet") |
[Name] |
Single dataset |
First(Fields!Name.Value, "DataSet1") + First(Fields!Name.Value, "DataSet2") |
[DataSet1.Name] + [DataSet2.Name] |
Multi-dataset |
Sum(Fields!Amount.Value, "DataSet") |
Sum([Amount]) |
Aggregation |
Count(Fields!ID.Value, "DataSet") |
Count([ID]) |
Aggregation |
Parameters¶
| RDLC | DevExpress |
|---|---|
Parameters!StartDate.Value |
?StartDate |
Operators¶
| RDLC | DevExpress | Notes |
|---|---|---|
not |
Not |
Logical NOT |
or |
Or |
Logical OR |
and |
And |
Logical AND |
.Equals(x) |
== x |
Equality check |
<> |
!= |
Not equal |
& |
& |
String concatenation |
Examples¶
Example 1: Simple Expression¶
RDLC:
DevExpress:
Example 2: Field Reference¶
RDLC:
DevExpress:
Example 3: Conditional¶
RDLC:
DevExpress:
Example 4: Multi-Dataset Expression¶
RDLC:
DevExpress:
Automatically handled: The converter automatically clears the DataMember property when multi-dataset expressions are detected, enabling ExpressionsAdvanced mode required for [DataSet.Field] syntax.
Partial Conversions¶
What "Partial" Means¶
The control converts successfully but may need manual adjustment.
Common Partial Conversions¶
Complex Tables
- Nested tables
- Multiple grouping levels
- Dynamic columns
What to do: Open in DevExpress Designer → Adjust groupings and layout
Charts
- Multiple series
- Custom colors
What to do: Configure series and appearance in DevExpress Designer
Not Auto-Converted¶
⚠️ Important: These patterns are only blocked if the DevExpress Import Tool marks them as #NOT_SUPPORTED# first. If DevExpress converts them directly (without marking), they will pass through our converter unchanged and may not work correctly in the final report.
Our converter processes expressions in two stages:
- DevExpress Import Tool converts the RDLC → REPX and marks problematic expressions as
#NOT_SUPPORTED# - Our Post-Processor scans for
#NOT_SUPPORTED#markers and attempts conversion or inserts manual review placeholders
Custom Code Functions¶
RDLC:
What happens:
- ✅ If DevExpress marks as
#NOT_SUPPORTED#: Replaced with placeholder[Manual Edit Required: Custom Code Function] - ⚠️ If DevExpress converts directly: Passes through (likely broken)
Solution: Rewrite in DevExpress Scripts tab
ReportItems References¶
RDLC:
What happens:
- ✅ If DevExpress marks as
#NOT_SUPPORTED#: Replaced with placeholder[Manual Edit Required: ReportItems Reference] - ⚠️ If DevExpress converts directly: Passes through (likely broken)
Solution: Use calculated field or direct field reference
Lookup Functions¶
RDLC:
What happens:
- ✅ If DevExpress marks as
#NOT_SUPPORTED#: Replaced with placeholder[Manual Edit Required: Lookup Function] - ⚠️ If DevExpress converts directly: Passes through (likely broken)
Solution: Verify in DevExpress, may need query restructure or use calculated fields
Rule Structure¶
Rules are in data/rules/mapping-rules.json:
{
"id": "textbox-to-xrlabel",
"match": {
"type": "Textbox"
},
"mapTo": "XRLabel",
"notes": "Textbox converted to XRLabel"
}
Viewing Rules in Cursor¶
Ask Cursor:
See Also¶
- MCP User Guide - Setup and configuration
- RDLC to DevExpress Conversion Guide - Convert individual RDLC files
- Conversion Flow - How conversion works
- Troubleshooting - Common issues
- DevExpress Migration Guide - Full project migration
Last Updated: December 18, 2025