XRTable Class

A Table control.

Namespace: DevExpress.XtraReports.UI

Assembly: DevExpress.XtraReports.v19.2.dll


public class XRTable :
Public Class XRTable
    Inherits XRControl
    Implements IWeightyContainer,

Returned By

Properties and methods that return XRTable instances:


The XRTable control presents data in tabular form. A table consists of rows. Use the XRTable.Rows property to access table rows. A row consists of cells. You can use the XRTableRow.Cells property to access a row's cells collection.

Create a Table at Runtime

Consider the following best practices when you create an XRTable control at runtime:

  • Always call the XRTable.BeginInit and XRTable.EndInit methods if you modify XRTable.Rows and XRTableRow.Cells collections at runtime.
  • Set a correct width to an XRTable control. The table size does not change when you add rows and cells to it.
  • Explicitly specify the table height only if you do not expect cell content to stretch cells (for instance, this may happen when their XRTableCell.CanGrow property is enabled).

The code sample below illustrates how to create an XRTable at runtime.

using DevExpress.XtraReports.UI;
// ...

// Create a new report and assign a data source to it.
XtraReport report = new XtraReport();
report.DataSource = ds;
report.DataMember = "queryProducts";

// Create a detail band and add it to the report.
DetailBand detailBand = new DetailBand();

// Create a table and add it to the detail band.
XRTable table = new XRTable();

// Create a row with the product name and product price cells.
XRTableRow row = new XRTableRow();
XRTableCell productName = new XRTableCell();
XRTableCell productPrice = new XRTableCell();

// Bind table cells to data fields.
productName.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[ProductName]"));
productPrice.ExpressionBindings.Add(new ExpressionBinding("BeforePrint", "Text", "[UnitPrice]"));

Retain Performance with Large Tables

If you create all table rows and cells manually, like in the code sample below, you may run into report performance issues. Set the XRTableRow.Weight and XRTableCell.Weight properties to 1 for all table rows and cells, respectively, to improve the performance.


We do not recommend this approach. Use the approach described in the Create a Table at Runtime section.

using DevExpress.XtraReports.UI;
// ...

private XRTable CreateLargeTable(int rowCount, int cellCount) {
    XRTable table = new XRTable();
    for (int i = 0; i < rowCount; i++) {
        XRTableRow row = new XRTableRow() {
            // Set the row's Weight property to improve the performance.
            Weight = 1 
        for (int j = 0; j < cellCount; j++) {
            XRTableCell cell = new XRTableCell() {
            // Set the cell's Weight property to improve the performance.
                Weight = 1

    return table;

Create a Custom Table

Implement descendants of the XRTable and XRTableRow classes to create a custom table (for instance, a table with a different default row height or with pre-populated cells). Override the protected virtual XRTable.CreateRow and XRTableRow.CreateCell methods. These methods are invoked in all designer operations, except for multiple item drops from the Field List.

The code sample below illustrates custom table implementation.

using DevExpress.XtraReports.UI;
using System.ComponentModel;
// ...

namespace WindowsFormsApplication1 {
    public class XRTableEx : XRTable {
        // Override the CreateRow() method to create a custom table row.
        protected override XRTableRow CreateRow() {
            return new XRTableRowEx();

    // Implement a custom table row with specified height.
    public class XRTableRowEx : XRTableRow {
        public XRTableRowEx()
            : base() {
            SizeF = new System.Drawing.SizeF(120, this.DefaultHeight);

        // Override the CreateCell() method to create a custom table cell.
        protected override XRTableCell CreateCell() {
            return new XRTableCellEx();

        // Specify the default row height.
        protected override int DefaultHeight {
            get {
                return 35;

    // Implement a custom table cell with custom text.
    public class XRTableCellEx : XRTableCell {
        public XRTableCellEx() {
            Text = "MyCustomXRTableCellEx";

Convert Labels to Table

You can convert multiple labels to a table to simplify control alignment. See the Manipulate Report Controls topic for more information.


See Also