XRTable Class
A Table control.
Namespace: DevExpress.XtraReports.UI
Assembly: DevExpress.XtraReports.v17.2.dll
NuGet Package: DevExpress.Reporting.Core
Declaration
Related API Members
The following members return XRTable objects:
Remarks
The XRTable control is intended to represent data in tabular form. A table consists of rows, accessed via its XRTable.Rows property. Every row consists of a number of cells, contained in the collections returned by the XRTableRow.Cells property of each row.
The following example illustrates the best approach to create large tables in code, which uses the XRTableCell.Weight and XRTableRow.Weight properties to specify the cell size (instead of using the XRTableCell.WidthF and XRTableRow.WidthF properties that are better suited for creating smaller tables).
The table generation occurs within the XRTable.BeginInit and XRTable.EndInit method calls.
using DevExpress.XtraReports.UI;
// ...
private XRTable CreateLargeTable(int rowCount, int cellCount) {
XRTable table = new XRTable();
table.BeginInit();
for (int i = 0; i < rowCount; i++) {
XRTableRow row = new XRTableRow() { Weight = 1 };
for (int j = 0; j < cellCount; j++) {
XRTableCell cell = new XRTableCell() { Weight = 1 };
row.Cells.Add(cell);
}
table.Rows.Add(row);
}
table.EndInit();
return table;
}
When creating descendants of the XRTable
and XRTableRow classes, you can override their protected virtual CreateRow and CreateCell methods. These methods are invoked in all designer operations, except for dropping multiple items from the Field List. The following example illustrates this approach.
using DevExpress.XtraReports.UI;
using System.ComponentModel;
// ...
namespace WindowsFormsApplication1 {
[ToolboxItem(true)]
public class XRTableEx : XRTable {
protected override XRTableRow CreateRow() {
return new XRTableRowEx();
}
}
public class XRTableRowEx : XRTableRow {
public XRTableRowEx()
: base() {
SizeF = new System.Drawing.SizeF(120, this.DefaultHeight);
}
protected override XRTableCell CreateCell() {
return new XRTableCellEx();
}
protected override int DefaultHeight {
get {
return 35;
}
}
}
public class XRTableCellEx : XRTableCell {
public XRTableCellEx() {
Text = "MyCustomXRTableCellEx";
}
}
}
Example
This example demonstrates how to create an XRTable
at runtime.
Please note that it is always required to call the XRTable.BeginInit and XRTable.EndInit methods if you modify XRTable.Rows and XRTableRow.Cells collections at runtime.
Tip
Online Example: Runtime table creation best practices (iterative approach)
using System.Drawing;
using System.Drawing.Printing;
using DevExpress.XtraReports.UI;
// ...
private void XtraReport1_BeforePrint(object sender, PrintEventArgs e) {
this.Detail.Controls.Add(CreateXRTable());
}
public XRTable CreateXRTable() {
int cellsInRow = 3;
int rowsCount = 3;
float rowHeight = 25f;
XRTable table = new XRTable();
table.Borders = DevExpress.XtraPrinting.BorderSide.All;
table.BeginInit();
for (int i = 0; i < rowsCount; i++) {
XRTableRow row = new XRTableRow();
row.HeightF = rowHeight;
for (int j = 0; j < cellsInRow; j++) {
XRTableCell cell = new XRTableCell();
row.Cells.Add(cell);
}
table.Rows.Add(row);
}
table.BeforePrint += new PrintEventHandler(table_BeforePrint);
table.AdjustSize();
table.EndInit();
return table;
}
// The following code makes the table span to the entire page width.
void table_BeforePrint(object sender, PrintEventArgs e) {
XRTable table = ((XRTable)sender);
table.LocationF = new DevExpress.Utils.PointFloat(0F, 0F);
table.WidthF = this.PageWidth - this.Margins.Left - this.Margins.Right;
}