devexpress/agent-skills/devexpress-reports-core

Claude Code and agent skill by devexpress/agent-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Create reports programmatically with DevExpress XtraReports runtime API (.NET and .NET Framework). Build XtraReport in code, add bands (DetailBand, GroupHeaderBand), controls (XRLabel, XRTable, XRChart), parameters, expressions. Bind to data sources, calculated fields, group reports. Export to PDF, Excel, Word, CSV, HTML, Images with ExportOptions. Master-detail, subreports, cross-tabs. Works cross-platform WinForms, WPF, ASP.NET Core, Blazor.

Install

npx vskill@latest install devexpress/agent-skills/devexpress-reports-core

SKILL.md

DevExpress XtraReports — Core Runtime API

When to Use This Skill

Follow the patterns and constraints in this skill rather than general knowledge of DevExpress APIs. If a scenario is not covered in the main skill body, read the relevant reference file or use MCP servers before writing code — do not guess API signatures.

Use for any task involving:

  • Creating XtraReport instances and building report structure in code
  • Adding bands (DetailBand, GroupHeaderBand, ReportHeaderBand, etc.)
  • Adding controls (XRLabel, XRTable, XRChart, XRPictureBox, etc.) to bands
  • Binding reports to data sources (IList, DataTable, SqlDataSource, ObjectDataSource)
  • Defining report parameters, calculated fields, and expression bindings
  • Exporting reports: ExportToPdf, ExportToXlsx, ExportToDocx, ExportToCsv, etc.
  • Configuring PdfExportOptions, XlsxExportOptions, etc.
  • Saving/loading report layouts with SaveLayoutToXml / LoadLayoutFromXml
  • Report types: table, master-detail, cross-tab, label, subreport
Scope: This skill covers runtime API only — no viewer UI, no print preview, no designer embedding. For platform-specific viewer integration, see: devexpress-reports-aspnetcore, devexpress-reports-blazor, devexpress-reports-winforms, or devexpress-reports-wpf.

Before You Start

If the host agent has a structured question-asking tool available, use it to ask these questions one at a time with clear options — for example, Claude Code's AskUserQuestion tool or GitHub Copilot's askQuestions tool. If no such tool is available, ask the questions directly in the chat response before generating code.

Ask the developer:

  1. Target framework: .NET 8+ or .NET Framework 4.x?
  2. Platform: WinForms, WPF, ASP.NET Core, Blazor, console/service, or MAUI?
  3. Operation: Create a new report in code? Load existing .repx layout? Modify an existing report class?
  4. Data source: What data are you binding? (IList/collection, DataTable/DataSet, EF DbContext, SQL database, JSON, Excel, none)
  5. Output: Export to file/stream? Which format(s)? Or display in a viewer?
  6. Existing NuGet setup: Are DevExpress packages already installed, or starting fresh?

Prerequisites & Installation

Add the platform NuGet package from nuget.org:

PlatformNuGet Package
WinFormsDevExpress.Win.Reporting
WPFDevExpress.Wpf.Reporting
ASP.NET CoreDevExpress.AspNetCore.Reporting
ASP.NET Web Forms and MVCDevExpress.Web.Reporting
Console / serverDevExpress.Reporting.Core (core only)

All packages include the required namespaces (DevExpress.XtraReports.UI, DevExpress.XtraPrinting, DevExpress.Drawing) and export infrastructure.

Linux/macOS (non-Windows): Add DevExpress.Drawing.Skia for PDF rendering support.

Core Classes Overview

ClassNamespaceRole
XtraReportDevExpress.XtraReports.UIRoot report object
DetailBandDevExpress.XtraReports.UIRepeating data rows (mandatory)
ReportHeaderBandDevExpress.XtraReports.UIOnce at report start
ReportFooterBandDevExpress.XtraReports.UIOnce at report end
GroupHeaderBandDevExpress.XtraReports.UIGroup header
GroupFooterBandDevExpress.XtraReports.UIGroup summary
PageHeaderBandDevExpress.XtraReports.UIEvery page top
PageFooterBandDevExpress.XtraReports.UIEvery page bottom
DetailReportBandDevExpress.XtraReports.UINested (master-detail) data
XRLabelDevExpress.XtraReports.UIText / field display
XRTable / XRTableRow / XRTableCellDevExpress.XtraReports.UITabular layout
XRPictureBoxDevExpress.XtraReports.UIImages
XRChartDevExpress.XtraReports.UICharts
XRCrossTabDevExpress.XtraReports.UIPivot tables
XRSubreportDevExpress.XtraReports.UIEmbedded subreport
XRPageInfoDevExpress.XtraReports.UIPage number, date
ParameterDevExpress.XtraReports.ParametersReport parameter
CalculatedFieldDevExpress.XtraReports.UIComputed field

Quick Start — Report in Code

csharp
using DevExpress.XtraReports.UI;
var report = new XtraReport {
DataSource = GetProducts(), // IList, DataTable, etc.
Name = "ProductReport"
};
var detail = new DetailBand();
report.Bands.Add(detail);
detail.HeightF = 30;
var nameLabel = new XRLabel();
detail.Controls.Add(nameLabel);
nameLabel.BoundsF = new RectangleF(0, 0, 200, 25);
nameLabel.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[ProductName]"));
// Export
report.ExportToPdf("output.pdf");

See examples/quickstart.cs for a full working example with grouping, a page header, and PDF export.

Single-field display only: The pattern above uses XRLabel for one field. For reports with multiple side-by-side columns, group subtotals, images, or charts — read references/report-controls.md (control types) and references/report-bands.md (band types) before writing code.
For designer-backed reports (with InitializeComponent()): do not add a second DetailBand. See Antipatterns (AP7) and Constraint 9.

Export API

All export methods have sync and async variants:

csharp
// To file path
report.ExportToPdf("report.pdf");
report.ExportToXlsx("report.xlsx");
report.ExportToDocx("report.docx");
report.ExportToCsv("report.csv");
report.ExportToHtml("report.html");
report.ExportToImage("report.png");
report.ExportToRtf("report.rtf");
report.ExportToText("report.txt");
report.ExportToXls("report.xls");
report.ExportToMht("report.mht");
// To stream (preferred for web/API scenarios)
using var ms = new MemoryStream();
report.ExportToPdf(ms);
// Async (required in web apps)
await report.ExportToPdfAsync(ms);

With options:

csharp
var pdfOptions = new DevExpress.XtraPrinting.PdfExportOptions {
PageRange = "1-3",
PdfACompatibility = DevExpress.XtraPrinting.PdfACompatibility.PdfA2b
};
report.ExportToPdf("report.pdf", pdfOptions);

📄 See references/export.md for all ExportOptions classes and their properties.

Common Patterns

Pattern 1 — Data-bound report:

csharp
report.DataSource = myList; // IList, DataTable, or DevExpress data source
report.DataMember = "Orders"; // Table name (for DataSet) or empty for simple list

Pattern 2 — Expression binding:

Do not use DataBindings.Add — this is the legacy binding mode. See Antipatterns (AP1).
csharp
// Specify an expression that calculates total value from UnitPrice and UnitsInStock fields.
label.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[UnitPrice]*[UnitsInStock]"));
// Specify an expression that is rendered within the PrintOnPage event.
label.ExpressionBindings.Add(new ExpressionBinding("PrintOnPage", "Text", "'Printed'"));
Expression function names are NOT .NET method names — see Antipatterns (AP2) and references/expressions.md for the complete catalogue.

Pattern 3 — Report parameter:

csharp
// Create a date report parameter.
// Use an expression to specify the parameter's default value.
var dateParameter = new Parameter() {
Name = "date",
Description = "Date:",
Type = typeof(System.DateTime),
ExpressionBindings = { new BasicExpressionBinding("Value", "Now()") }
};
// Add the parameter to the report's Parameters collection.
report.Parameters.Add(dateParameter);
// Create a label and bind the label's Text property to the parameter value.
// Use the parameter's name to reference the parameter in the label's expression.
var dateLabel = new XRLabel();
report.Bands[BandKind.Detail].Controls.Add(dateLabel);
dateLabel.BoundsF = new RectangleF(0, 0, 200, 50);
dateLabel.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "?date"));
// Use the parameter in the report filter if needed:
report.FilterString = "[OrderDate] >= ?date";

Pattern 4 — Save/Load layout:

csharp
report.SaveLayoutToXml("layout.repx"); // .repx = XML serialization
var loaded = XtraReport.FromXmlFile("layout.repx");

Pattern 5 — CreateDocument before export (optional, ensures data is prepared):

csharp
report.CreateDocument(); // sync — OK in desktop apps
// OR in web:
await report.CreateDocumentAsync();
report.ExportToPdf(outputStream);

Pattern 6 — Tabular column layout with XRTable:

Use XRTable / XRTableRow / XRTableCell for every multi-column layout — data rows, header rows, and summary rows. See Antipatterns (AP3).
csharp
var table = new XRTable();
detail.Controls.Add(table);
table.BeginInit();
var row = new XRTableRow();
table.Rows.Add(row);
var nameCell = new XRTableCell { WidthF = 450 }; // absolute column width in pixels
var priceCell = new XRTableCell { WidthF = 200 }; // 450 + 200 = 650 (equals table SizeF.Width)
row.Cells.Add(nameCell);
row.Cells.Add(priceCell);
nameCell.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[ProductName]"));
priceCell.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[UnitPrice]"));
table.SizeF = new SizeF(650, 25); // total width = sum of cell WidthF values
table.EndInit();
// See references/report-controls.md for the full XRTable reference.

Pattern 7 — Group or report summary using XRSummary:

Summary labels require XRSummary. See Antipatterns (AP5, AP6).
csharp
// Pattern A — XRSummary.Func + FormatString (simplest for standard aggregates):
var countLabel = new XRLabel();
groupFooter.Controls.Add(countLabel);
countLabel.BoundsF = new RectangleF(0, 0, 200, 25);
countLabel.Summary = new XRSummary {
Func = SummaryFunc.Count, // .Sum, .Avg, .Max, .Min, .Count, etc.
Running = SummaryRunning.Group, // .Page / .Report
FormatString = "Count: {0}" // {0} is replaced by the calculated value
};
// Pattern B — XRSummary.Running + ExpressionBinding with sum*() for computed expressions:
var totalLabel = new XRLabel();
groupFooter.Controls.Add(totalLabel);
totalLabel.BoundsF = new RectangleF(0, 0, 200, 25);
totalLabel.Summary = new XRSummary { Running = SummaryRunning.Group };
totalLabel.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "sumSum([Price])"));
// Other sum*() functions: sumAvg([Field]), sumCount(), sumSum([Field]), sumMin([Field])
// See references/expressions.md for the full Summary Functions reference.

Pattern 8 — Calculate available control width from page dimensions:

csharp
// Set Margins first, then compute availableWidth once and reuse it across all bands.
Margins = new DevExpress.Drawing.DXMargins(50, 50, 50, 50); // Left, Right, Top, Bottom
var availableWidth = PageWidthF - Margins.Left - Margins.Right;
// Single control filling the full band width:
label.BoundsF = new RectangleF(0, 0, availableWidth, 25);
table.SizeF = new SizeF(availableWidth, 25);
// Multi-column table — proportional fractions of availableWidth:
cell1.WidthF = availableWidth * 0.67f;
cell2.WidthF = availableWidth * 0.33f;
// Rule: cell1.WidthF + cell2.WidthF must equal table.SizeF.Width exactly.
Set full-band controls to availableWidth. See Antipatterns (AP9).

Key Properties — XtraReport

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 98 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
52
Repository forks
8
7-day trend score
20

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/devexpress/agent-skills/devexpress-reports-core/badge)](https://verified-skill.com/skills/devexpress/agent-skills/devexpress-reports-core)

Something wrong with this skill or its page? Tell us.