限制 ReportViewer 只允许保存 PDF

Limit ReportViewer to only allow to save PDF

我有一个 win form 应用程序,它有一些关于日期的信息,当用户点击一个按钮时,它将打开报告查看器,用户应该保存文件

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

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

首先,您可以使用 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);;
    }
}

要更改 ToolStrip 外观以仅显示保存按钮而不显示下拉菜单,您可以找到 ReportViewerToolStrip,然后找到 "export"按钮并删除下拉菜单。

要显示仅允许保存 PDF 的保存对话框,请将事件处理程序附加到 "export" 按钮的单击事件,并使用报告查看器的 ExportDialog 方法显示保存对话框。您可以通过 LocalReportListRenderingExtensions() 方法找到扩展名 return 之间的 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));
};

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

我使用了 Reza Aghaei 提供的建议。然而,reportview 的上下文菜单还提供了一个导出下拉列表,Reza 的建议没有触及它。我禁用了 ReportViewer ConcextMenu 来解决这个问题。

ShowContextMenu = false