Search code examples
devexpressruntimetabularxtrareport

In DevExpress xtra reports, I would like to increase height of table dynamically


In devexpress report, I have two tables. Based on content T2 table height increases, based on T1 height should be set.

I tried to set height in BeforePrint, AfterPrint, SizeChanged, TextChanged events of T2 and also DataSourceChanged event of report, as follows, added image for reference.

T1.HeightF = T2.HeightF;

            or

T1.SizeF = new SizeF(T1.WidthF, T2.HeightF);

Example

But above ways didn't work out.
Any idea how to set height of table dynamically?

enter image description here


Solution

  • You can set XRControl.AnchorVertical property of your table to VerticalAnchorStyles.Both value, so your table will be always attached to sides of its container.

    xrTable1.AnchorVertical = VerticalAnchorStyles.Both;
    

    Here is example:

    var source = new List<Tuple<string>>()
    {
        new Tuple<string>("Text"),
        new Tuple<string>("Some\ntext"),
        new Tuple<string>("Some long long\nlong long long\nlong long long text.")
    };
    
    var cell = new XRTableCell();
    cell.Text = "Just table";
    
    var someCell = new XRTableCell();
    someCell.Text = "Some text";
    
    var anotherCell = new XRTableCell();
    anotherCell.Text = "Another cell text";
    
    var contentCell = new XRTableCell();
    contentCell.DataBindings.Add(new XRBinding("Text", null, "Item1"));
    contentCell.Multiline = true;
    
    var anotherContentCell = new XRTableCell();
    anotherContentCell.Text = "Content table";
    
    var row = new XRTableRow();
    row.Cells.AddRange(new[] { cell, someCell, anotherCell });
    
    var contentRow = new XRTableRow();
    contentRow.Cells.AddRange(new[] { contentCell, anotherContentCell });
    
    var table = new XRTable();
    table.Rows.Add(row);
    table.Borders = DevExpress.XtraPrinting.BorderSide.All;
    table.AnchorVertical = VerticalAnchorStyles.Both;
    
    var contentTable = new XRTable();
    contentTable.Rows.Add(contentRow);
    contentTable.Borders = DevExpress.XtraPrinting.BorderSide.All;
    contentTable.LeftF = 350F;
    
    var panel = new XRPanel();
    panel.HeightF = contentTable.HeightF = table.HeightF = 15F;
    panel.WidthF = 650F;
    panel.Controls.AddRange(new[] { table, contentTable });            
    
    var detail = new DetailBand();
    detail.HeightF = 30F;
    detail.Controls.Add(panel);
    
    var report = new XtraReport();
    report.Bands.Add(detail);
    report.DataSource = source;
    
    report.ShowRibbonPreview();
    

    Here is result of example:

    Result