Back to Devexpress

Create a Cross-Tab Report in Code

xtrareports-403673-feature-guide-to-devexpress-reports-reporting-api-create-reports-in-code-create-a-cross-tab-report.md

latest7.0 KB
Original Source

Create a Cross-Tab Report in Code

  • Feb 18, 2026
  • 4 minutes to read

The following code sample creates a new SqlDataSource, creates a report with the XRCrossTab control at runtime, and binds the Cross Tab control to data:

csharp
using DevExpress.DataAccess.ConnectionParameters;
using DevExpress.DataAccess.Sql;
using DevExpress.XtraPrinting;
using DevExpress.XtraReports.UI;
using DevExpress.XtraReports.UI.CrossTab;
using System;
using System.Drawing;
using System.Windows.Forms;
// ...
private XtraReport CreateReport() {
    // Creates a blank report.
    XtraReport crossTabReport = new XtraReport() {
        VerticalContentSplitting = VerticalContentSplitting.Smart,
        HorizontalContentSplitting = HorizontalContentSplitting.Smart
    };

    // Creates a detail band and adds it to the report.
    DetailBand detail = new DetailBand();
    crossTabReport.Bands.Add(detail);

    // Creates a cross tab and adds it to the Detail band.
    XRCrossTab crossTab = new XRCrossTab();
    detail.Controls.Add(crossTab);
    crossTab.PrintOptions.RepeatColumnHeaders = true;
    crossTab.PrintOptions.RepeatRowHeaders = true;

    // Creates a data source.
    SQLiteConnectionParameters connectionParameters = new SQLiteConnectionParameters(@"|DataDirectory|\nwind.db", "");
    SqlDataSource ds = new SqlDataSource(connectionParameters);

    // Creates an SQL query to access the SalesPerson view.
    SelectQuery query = SelectQueryFluentBuilder.AddTable("SalesPerson")
                .SelectColumn("CategoryName")
                .SelectColumn("ProductName")
                .SelectColumn("Country")
                .SelectColumn("FullName")
                .SelectColumn("Quantity")
                .SelectColumn("ExtendedPrice").Build("SalesPerson");
    ds.Queries.Add(query);

    // Binds the cross tab to data.
    crossTab.DataSource = ds;
    crossTab.DataMember = "SalesPerson";

    // Generates cross tab fields.
    crossTab.RowFields.Add(new CrossTabRowField() { FieldName = "CategoryName" });
    crossTab.RowFields.Add(new CrossTabRowField() { FieldName = "ProductName" });
    crossTab.ColumnFields.Add(new CrossTabColumnField() { FieldName = "Country" });
    crossTab.ColumnFields.Add(new CrossTabColumnField() { FieldName = "FullName" });
    crossTab.DataFields.Add(new CrossTabDataField() { FieldName = "Quantity" });
    crossTab.DataFields.Add(new CrossTabDataField() { FieldName = "ExtendedPrice" });
    crossTab.GenerateLayout();
// ...
    // Adjusts the generated cells.
    foreach(var c in crossTab.ColumnDefinitions) {
        // Enables auto-width for all columns.
        c.AutoWidthMode = DevExpress.XtraReports.UI.AutoSizeMode.GrowOnly;
    }

    foreach(XRCrossTabCell c in crossTab.Cells) {
        if(c.DataLevel == 1 && c.RowIndex != 2) {
            // Adjusts format string for the "Extended Price" cells.
            c.TextFormatString = "{0:c}";
        }
    }

    // Assigns styles to the cross tab.
    crossTab.CrossTabStyles.GeneralStyle = new XRControlStyle() { 
        Name = "Default",
        Borders = BorderSide.All,
        Padding = new PaddingInfo() { All = 2 }                
    };
    crossTab.CrossTabStyles.DataAreaStyle = crossTab.CrossTabStyles.TotalAreaStyle = new XRControlStyle() {
        Name = "Data",
        TextAlignment = TextAlignment.TopRight
    };
    crossTab.CrossTabStyles.HeaderAreaStyle = new XRControlStyle() {
        Name = "HeaderAndTotals",
        BackColor = Color.WhiteSmoke
    };
    return crossTabReport;
}
vb
Imports DevExpress.DataAccess.ConnectionParameters
Imports DevExpress.DataAccess.Sql
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraReports.UI
Imports DevExpress.XtraReports.UI.CrossTab
' ...
Private Function CreateReport() As XtraReport
    ' Creates a blank report.
    Dim crossTabReport As XtraReport = New XtraReport() With {.VerticalContentSplitting = VerticalContentSplitting.Smart, .HorizontalContentSplitting = HorizontalContentSplitting.Smart}
    ' Creates a detail band and adds it to the report.
    Dim detail As DetailBand = New DetailBand()
    crossTabReport.Bands.Add(detail)
    ' Creates a cross tab and adds it to the Detail band.
    Dim crossTab As XRCrossTab = New XRCrossTab()
    detail.Controls.Add(crossTab)
    crossTab.PrintOptions.RepeatColumnHeaders = True
    crossTab.PrintOptions.RepeatRowHeaders = True
    ' Creates a data source.
    Dim connectionParameters As SQLiteConnectionParameters = New SQLiteConnectionParameters("|DataDirectory|\nwind.db", "")
    Dim ds As SqlDataSource = New SqlDataSource(connectionParameters)
    ' Creates an SQL query to access the SalesPerson view.
    Dim query As SelectQuery = SelectQueryFluentBuilder.AddTable("SalesPerson").SelectColumn("CategoryName").SelectColumn("ProductName").SelectColumn("Country").SelectColumn("FullName").SelectColumn("Quantity").SelectColumn("ExtendedPrice").Build("SalesPerson")
    ds.Queries.Add(query)
    ' Binds the cross tab to data.
    crossTab.DataSource = ds
    crossTab.DataMember = "SalesPerson"
    ' Generates cross tab fields.
    crossTab.RowFields.Add(New CrossTabRowField() With {.FieldName = "CategoryName"})
    crossTab.RowFields.Add(New CrossTabRowField() With {.FieldName = "ProductName"})
    crossTab.ColumnFields.Add(New CrossTabColumnField() With {.FieldName = "Country"})
    crossTab.ColumnFields.Add(New CrossTabColumnField() With {.FieldName = "FullName"})
    crossTab.DataFields.Add(New CrossTabDataField() With {.FieldName = "Quantity"})
    crossTab.DataFields.Add(New CrossTabDataField() With {.FieldName = "ExtendedPrice"})
    crossTab.GenerateLayout()
' ...
    ' Adjusts the generated cells.
    For Each c In crossTab.ColumnDefinitions
        ' Enables auto-width for all columns.
        c.AutoWidthMode = DevExpress.XtraReports.UI.AutoSizeMode.GrowOnly
    Next

    For Each c As XRCrossTabCell In crossTab.Cells
        If c.DataLevel = 1 AndAlso c.RowIndex <> 2 Then
            ' Adjusts format string for the "Extended Price" cells.
            c.TextFormatString = "{0:c}"
        End If
    Next

    ' Assigns styles to the cross tab.
    crossTab.CrossTabStyles.GeneralStyle = New XRControlStyle() With {.Name = "Default", .Borders = BorderSide.All, .Padding = New PaddingInfo() With {.All = 2}}
    crossTab.CrossTabStyles.TotalAreaStyle = New XRControlStyle() With {.Name = "Data", .TextAlignment = TextAlignment.TopRight}
    crossTab.CrossTabStyles.DataAreaStyle = crossTab.CrossTabStyles.TotalAreaStyle
    crossTab.CrossTabStyles.HeaderAreaStyle = New XRControlStyle() With {.Name = "HeaderAndTotals", .BackColor = Color.WhiteSmoke}
    Return crossTabReport
End Function

View Example: Reporting for WinForms - Use XRCrossTab Control to Create Cross-Tab Report in Code