3

データセットからのレポートとデータを読み込んでいる 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 も簡単に試してみました。

4

2 に答える 2

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
}

コントロールのレンダリングがいつ完了するかがわかります。

于 2012-12-05T19:57:47.583 に答える
2

Crystal Reports 13 には、何らかの理由で UI に公開されていない (Browsable(false)属性がある) PageChanged イベントがあります。レポートをズームする必要がありましたが、このイベントは私がそれを行うことができる唯一の非ハッキーな方法でした。

viewer.PageChanged += Viewer_PageChanged;

フォームコンストラクターで、次に追加します

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

あなたのプライベートメソッドに。(viewerCrystalReportViewerフォーム上のコンポーネントです。)

于 2016-04-12T11:01:53.513 に答える