【问题标题】:Limit ReportViewer to only allow to save PDF限制 ReportViewer 只允许保存 PDF
【发布时间】:2018-01-14 18:26:06
【问题描述】:

我有一个 win 表单应用程序,当用户点击一个按钮时它会打开报告查看器,用户应该保存文件

如您所知,报表查看器会让用户将文件保存为 PDF、WORD 和 EXCEL。

我只想让用户只看到并按下 PDF 保存。

【问题讨论】:

  • @dlatikay 不,那不行
  • 不清楚您是在谈论水晶报表组件还是微软数据报表设计器。我标记为后者,但我可能错了。请让我们知道或至少包含您的代码的相关部分。
  • @dlatikay 它是 c# windows 窗体应用程序的报告查看器 抱歉,我现在没有任何代码,我想在我的项目中使用这个工具,他需要数据库中的 pdf 文件有什么想法吗?
  • 用户需要预览吗?如果没有,您可以在不打开报表查看器的情况下directly generate the file

标签: c# winforms reportviewer


【解决方案1】:

首先,您可以使用ShowExportControls 属性禁用导出。

然后,您将在工具条中添加一个自定义按钮。这将在您的form load event 中完成。

ToolStrip ts = (ToolStrip)crystalReportViewer1.Controls[3]; 
ToolStripButton printbutton = new ToolStripButton(); 
printbutton.Image = ts.Items[1].Image; 
ts.Items.Remove(ts.Items[1]); 
ts.Items.Insert(1, printbutton); 
ts.Items[1].Click += new EventHandler(this.CaptureEvent);                   
cr = new CrystalReport1(); 
this.crystalReportViewer1.ReportSource = cr; 

然后您将拥有该按钮的自定义事件处理程序

private void CaptureEvent(Object Sender, EventArgs e) 
{
    // In this code, you'll have your own custom save file dialog
    // Once you get that file name, save to PDF
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.InitialDirectory = Environment.SpecialFolder.MyDocuments.ToString();
    saveFileDialog.Filter = "Document (*.pdf)|*.PDF";
    saveFileDialog.FilterIndex = 1;
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    { 
        crystalReportViewer1.ExportToDisk(ExportFormatType.PortableDocFormat, saveFileDialog.FileName);;
    }
}

【讨论】:

  • 是的......你没有得到什么?......第一组代码应该在你的表单加载中
  • 这里为 CrystalReportViewer1
  • Report.ExportToDisk(ExportFormatType.PortableDocFormat, saveFileDialog.FileName);这里也是
  • 你有电报吗?
  • 更多细节?
【解决方案2】:

要将ToolStrip 的外观更改为只显示保存按钮而不显示下拉菜单,您可以找到ReportViewerToolStrip,然后找到“导出”按钮并删除下拉菜单。

要显示保存对话框以仅允许保存 PDF,请将事件处理程序附加到“导出”按钮的单击事件,并使用报表查看器的 ExportDialog 方法显示保存对话框。您可以在通过LocalReportListRenderingExtensions() 方法返回的扩展名之间找到PDF 扩展名,并将其传递给ExportDialog 方法以将对话框限制为仅显示PDF 扩展名。

示例 1

将此代码粘贴到表单的加载事件中,加载报告后,按保存按钮。它将显示一个保存对话框,其中仅包含用于保存文件的 PDF 选项:

var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).ShowDropDownArrow = false;
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
    ((ToolStripDropDownButton)obj).DropDownItems.Clear();
};
((ToolStripDropDownButton)toolStrip.Items["export"]).Click += (obj, arg) =>
{
    var pdf = reportViewer1.LocalReport.ListRenderingExtensions()
        .Where(x => x.Name == "PDF").First();
    reportViewer1.ExportDialog(pdf);
};

示例 2

如果您不想删除下拉箭头,只想在下拉菜单中显示 PDF 选项,请使用以下代码:

var toolStrip = (ToolStrip)reportViewer1.Controls.Find("toolStrip1", true).First();
((ToolStripDropDownButton)toolStrip.Items["export"]).DropDownOpening += (obj, arg) =>
{
    var item = ((ToolStripDropDownButton)obj);
    item.DropDownItems.Cast<ToolStripItem>().Where(x => x.Text != "PDF").ToList()
        .ForEach(x => item.DropDownItems.Remove(x));
};

【讨论】:

  • 我已经尝试了这两种解决方案,没有任何问题。如果您在应用解决方案时遇到问题,请告诉我...
【解决方案3】:

(看来我没有足够的声誉来添加评论)

我使用了 Reza Aghaei 提供的建议。然而,reza 的建议未触及报告视图的上下文菜单也提供了导出下拉菜单。我禁用了 ReportViewer ConcextMenu 来解决这个问题。

ShowContextMenu = 假

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2013-01-29
    • 2014-07-21
    • 2012-01-21
    • 2023-03-12
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    相关资源
    最近更新 更多