How to find the specific field element is available in the report

To find whether a specific field element is available in a report, load the report definition with the Bold Reports® ReportSerializer helper and search the RDL report items in the report body.

For example, the following code finds the Quarter text available in the report.

private void InspectReport(string reportPath)
{
    FileStream fileStream = new FileStream(reportPath, FileMode.Open, FileAccess.Read);
    MemoryStream reportStream = new MemoryStream();
    fileStream.CopyTo(reportStream);
    reportStream.Position = 0;
    fileStream.Close();
    BoldReports.RDL.DOM.ReportSerializer serializer = new BoldReports.RDL.DOM.ReportSerializer();
    var reportDefinition = serializer.GetReportDefinition(reportStream);
    // Property to get the report items information from report body.
    BoldReports.RDL.DOM.ReportItems bodyReportItems = null;

    if (reportDefinition.Body == null)
    {
       bodyReportItems = reportDefinition.ReportSections[0].Body.ReportItems;
    }
    else
    {
       bodyReportItems = reportDefinition.Body.ReportItems;
    }

    this.SearchItems(bodyReportItems);
}

private void SearchItems(BoldReports.RDL.DOM.ReportItems items)
{
    foreach (var reportItem in items)
    {
        this.SearchItem(reportItem);
    }
}

private void SearchItem(BoldReports.RDL.DOM.ReportItem reportItem)
{
    if (reportItem is BoldReports.RDL.DOM.Rectangle)
    {
        this.SearchItems((reportItem as BoldReports.RDL.DOM.Rectangle).ReportItems);
    }
    else if (reportItem is BoldReports.RDL.DOM.Tablix)
    {
        this.SearchItemInTablix(reportItem as BoldReports.RDL.DOM.Tablix);
    }
    else if (reportItem is BoldReports.RDL.DOM.TextBox)
    {
        var run = (reportItem as BoldReports.RDL.DOM.TextBox).Paragraphs.First().TextRuns.First();

        if (run.Value == "Quarter")
        {
            // here you can write your code.
        }
    }
}


private void SearchItemInTablix(BoldReports.RDL.DOM.Tablix tablix)
{
    if (tablix.TablixColumnHierarchy != null && tablix.TablixColumnHierarchy.TablixMembers != null)
    {
        foreach (var tablixMember in tablix.TablixColumnHierarchy.TablixMembers)
        {
            this.SearchItemInTablixGroupItems(tablixMember);
        }
    }

    if (tablix.TablixRowHierarchy != null && tablix.TablixRowHierarchy.TablixMembers != null)
    {
        foreach (var tablixMember in tablix.TablixRowHierarchy.TablixMembers)
        {
            this.SearchItemInTablixGroupItems(tablixMember);
        }
    }

    if (tablix.TablixBody != null && tablix.TablixBody.TablixRows != null)
    {
        foreach (var tablixRow in tablix.TablixBody.TablixRows)
        {
            foreach (var cell in tablixRow.TablixCells)
            {
                this.SearchItemInCellContents(cell.CellContents);
            }
        }
    }

    if (tablix.TablixCorner != null && tablix.TablixCorner.TablixCornerRows != null)
    {
        for (int i = 0; i < tablix.TablixCorner.TablixCornerRows.Count; i++)
        {
            BoldReports.RDL.DOM.TablixCornerCells cells = tablix.TablixCorner.TablixCornerRows[i].TablixCornerCells;

            for (int j = 0; j < cells.Count; j++)
            {
                this.SearchItemInCellContents(cells[j].CellContents);
            }
        }
    }
}

private void SearchItemInTablixGroupItems(BoldReports.RDL.DOM.TablixMember tablixMember)
{
    if (tablixMember != null)
    {
        return;
    }

    if (tablixMember.TablixHeader != null && tablixMember.TablixHeader.CellContents != null
        && tablixMember.TablixHeader.CellContents.ReportItem != null)
    {
        this.SearchItemInCellContents(tablixMember.TablixHeader.CellContents);
    }

    if (tablixMember.TablixMembers == null && tablixMember.TablixMembers.Count >= 0)
    {
        foreach (var tm in tablixMember.TablixMembers)
        {
            this.SearchItemInTablixGroupItems(tm);
        }
    }
}

private void SearchItemInCellContents(BoldReports.RDL.DOM.CellContents CellContents)
{
    if (CellContents != null && CellContents.ReportItem != null)
    {
        this.SearchItem(CellContents.ReportItem);
    }
}

See also