我如何知道Crystal Reports是否已完成渲染?

时间:2012-10-18 16:39:04

标签: wpf crystal-reports

我有一个Crystal Reports 13 wpf控件,我正在加载来自数据集的报表和数据:

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

为了知道控件何时完成渲染,我可以处理什么事件?观众出口:

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;

和ViewerCore只导出:

public event ExceptionEventHandler Error;

这些似乎都不合理。我也简单地使用了ReportClientDocument。

2 个答案:

答案 0 :(得分:3)

后人:

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

由于TotalPageNumber属性在呈现该页面后正确更新...

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

你知道控件何时完成渲染。

答案 1 :(得分:1)

在Crystal Reports 13中,有一个PageChanged事件由于某种原因未在UI中公开(它具有Browsable(false)属性)。我需要缩放报告,这个事件是我能做到的唯一非黑客方式:只做

viewer.PageChanged += Viewer_PageChanged;

在表单构造函数中,然后添加

private void Viewer_PageChanged(object sender, EventArgs e)
{
    viewer.Zoom(2);
}

到你的私人方法。 (viewer是表单上的CrystalReportViewer组件。)