找回密码
 立即注册

QQ登录

只需一步,快速开始

Lenka.Guo 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2022-2-22 13:50  /   查看:1680  /  回复:0
本帖最后由 Lenka.Guo 于 2022-2-22 14:06 编辑

你可以管理异步或耗时较长的报表渲染。ActiveReports提供了许多控制输出过程的可能性,有助于您创建响应式应用程序。该方法可适用于以下示例:
  • 以页数显示导出进度(ActiveReports只有在渲染完成后才能显示总页数)。
  • 创建一个带有 "取消 "选项的 "导出 "对话框。
  • 输出有关报表执行的日志信息




显示进度信息
让我们看看如何使用WinForms Viewer 应用程序来显示导出渲染进度信息。导出示例可在github上下载:https://github.com/activereports ... I/PageAndRDL/Export导出PDF、图像、HTML和Excel渲染进度信息可以在报表渲染时显示出来
注意:如果报表在渲染时,设置画廊模式时,是不会显示导出进度信息。
1. 打开“导出”示例
2. 新建Form窗体,并添加标签控件。
3. 在exportButton_Click()  方法中添加以下代码:
C#代码

  1.                             private async void ExportAsync(PageReport report, IRenderingExtension renderingExtension, StreamProvider outputProvider, NameValueCollection settings)
  2. {
  3.    labelExport.Text = "Export started...";
  4.    var control = this;
  5.    var progress = new Progress<ProgressInfo>(progressInfo =>
  6.    {
  7.       control.BeginInvoke(new MethodInvoker(() =>
  8.       {
  9.          labelExport.Text = progressInfo.IsLast ? "Export is finished." : $"Exported {progressInfo.PageNumber} pages.";
  10.       ))};
  11.    });
  12.    await Task.Run(() =>
  13.    {
  14.       try
  15.       {
  16.          report.Document.Render(renderingExtension, outputProvider, settings, false, false, CancellationToken.None, progress);
  17.       }
  18.       catch
  19.       {
  20.       }
  21.    });
  22. }                                

  23.                         
复制代码


4. 调用 exportButton_Click()  方法 代替report.Document.Render() 方法。
5. 运行项目,执行导出按钮,可以看到标签会出现导出的页码信息。



取消报表渲染
代码:

  1.                     private async void ExportAsync(PageReport report, IRenderingExtension renderingExtension, FileStreamProvider outputProvider, NameValueCollection settings)
  2. {
  3.    _cancellationTokenSource = new CancellationTokenSource();
  4.    exportButton.Text = "Cancel";
  5.    exportButton.Click -= exportButton_Click;
  6.    exportButton.Click += cancelExport;
  7.      
  8.    await Task.Run(() =>
  9.    {
  10.       try
  11.       {
  12.          report.Document.Render(renderingExtension, outputProvider, settings, false, false, _cancellationTokenSource.Token);
  13.       }
  14.       catch (OperationCanceledException)
  15.       {
  16.       }
  17.    });
  18.      
  19.    if (_cancellationTokenSource.IsCancellationRequested)
  20.        MessageBox.Show("Export was cancelled", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information);
  21.    _cancellationTokenSource.Dispose();
  22.    _cancellationTokenSource = null;
  23.    exportButton.Click -= cancelExport;
  24.    exportButton.Click += exportButton_Click;
  25.    exportButton.Text = "Export";
  26. }
  27.      
  28. private void cancelExport(object sender, EventArgs e)
  29. {
  30.    _cancellationTokenSource?.Cancel();
  31. }        

  32.                
复制代码


输出导出信息日志
要将报表渲染信息输出日志,可在导出调用之前/之后添加以下代码。如果要了解更多信息,可参考微软的帮助文档: https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/trace-listeners.
C# 代码:

  1.                     private async void ExportAsync(PageReport report, IRenderingExtension renderingExtension, FileStreamProvider outputProvider, NameValueCollection settings)
  2. {
  3.    _cancellationTokenSource = new CancellationTokenSource();
  4.    exportButton.Text = "Cancel";
  5.    exportButton.Click -= exportButton_Click;
  6.    exportButton.Click += cancelExport;
  7.      
  8.    await Task.Run(() =>
  9.    {
  10.       try
  11.       {
  12.          report.Document.Render(renderingExtension, outputProvider, settings, false, false, _cancellationTokenSource.Token);
  13.       }
  14.       catch (OperationCanceledException)
  15.       {
  16.       }
  17.    });
  18.      
  19.    if (_cancellationTokenSource.IsCancellationRequested)
  20.        MessageBox.Show("Export was cancelled", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information);
  21.    _cancellationTokenSource.Dispose();
  22.    _cancellationTokenSource = null;
  23.    exportButton.Click -= cancelExport;
  24.    exportButton.Click += exportButton_Click;
  25.    exportButton.Text = "Export";
  26. }
  27.      
  28. private void cancelExport(object sender, EventArgs e)
  29. {
  30.    _cancellationTokenSource?.Cancel();
  31. }        

  32.                
复制代码









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部