2012-10-18 51 views
2

我有一個水晶報表,我用我的報告和數據加載從數據集13 WPF控件:我如何知道Crystal Reports已完成渲染?

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。

回答

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 
} 

你知道什麼時候該控制完成渲染。

+0

謝謝;這在CR 13(WinForms)中並不適用於我,但給了我這個想法,讓我找到了我發佈的解決方案。 –

+0

如果ReportSource更改爲相同數量的頁面,該怎麼辦? – CodingYourLife

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組件。)

+0

好像我有v13但我沒有PageChanged事件可用(也不在CodeBehind中)。有小費嗎? – CodingYourLife

+0

好吧剛剛注意到PageChanged在WinForms版本中可用,但不是WPF版本 – CodingYourLife

+0

沒有它甚至沒有在Windows窗體版本中,我只是檢查,我不知道爲什麼它如此複雜以找到此單一事件。 – user734028

相關問題