Search code examples
wpfcrystal-reports

How do I know Crystal Reports is done rendering?


I have a Crystal Reports 13 wpf control that I'm loading with a report and data from a dataset:

ReportDocument report = new ReportDocument();
if (report != null)
{
  report.Load(ReportFileName);
  report.SetDataSource(DataSet);
  reportViewer.ViewerCore.ReportSource = report;
}

What event can I handle in order to know when the control is done rendering? The viewer exports:

public event PageMouseEventHandler ClickPage;
public event PageMouseEventHandler DoubleClickPage;
public event DrillEventHandler Drill;
public event DrillSubreportEventHandler DrillDownSubreport;
public event NavigateEventHandler Navigate;
public event RefreshEventHandler Refresh;
public event SearchEventHandler Search;
public event RoutedEventHandler SelectionChange;
public event RoutedEventHandler ViewChange;
public event ZoomEventHandler ViewZoom;

and ViewerCore only exports:

public event ExceptionEventHandler Error;

None of these seem plausible. I've briefly played with the ReportClientDocument as well.


Solution

  • For posterity:

    DependencyPropertyDescriptor p = DependencyPropertyDescriptor.FromProperty(SAPBusinessObjects.WPF.Viewer.ViewerCore.TotalPageNumberProperty, typeof(SAPBusinessObjects.WPF.Viewer.ViewerCore));
    p.AddValueChanged(reportViewer.ViewerCore, OnPageCountChanged);
    

    Since the TotalPageNumber property is correctly updated after that page is rendered...

    private void OnPageCountChanged(object sender, EventArgs e)
    {
       //do whats needed
    }
    

    You know when the control is done rendering.