C# 将ReportViewer限制为仅允许保存PDF

C# 将ReportViewer限制为仅允许保存PDF,c#,winforms,reportviewer,C#,Winforms,Reportviewer,我有一个win form应用程序,它有一些关于日期的信息,当用户单击按钮时,它将打开报表查看器,用户应保存该文件 正如您所知,报告查看器将允许用户将文件保存为PDF、WORD和EXCEL 我只想让用户看到并按PDF保存。首先,可以使用ShowExportControls属性禁用导出 然后,将向toolstrip添加一个自定义按钮。这将在表单加载事件中完成 ToolStrip ts = (ToolStrip)crystalReportViewer1.Controls[3]; ToolStripB

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

正如您所知,报告查看器将允许用户将文件保存为PDF、WORD和EXCEL


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

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

然后,将向toolstrip添加一个自定义按钮。这将在
表单加载事件中完成

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
外观以仅显示保存按钮而不显示下拉列表,您可以找到
ReportViewer
ToolStrip
,然后找到“导出”按钮并删除下拉列表

要显示仅允许保存PDF的保存对话框,请附加事件处理程序以单击“导出”按钮的事件,并使用报表查看器的
ExportDialog
方法显示保存对话框。您可以在通过
LocalReport
listrendingextensions()方法返回的扩展名之间找到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));
};
var toolStrip=(toolStrip)reportViewer1.Controls.Find(“toolStrip1”,true.First();
((ToolStripDropDownButton)toolStrip.Items[“导出”]).DropDownOpen+=(对象、参数)=>
{
变量项=((ToolStripDropDownButton)obj);
item.DropDownItems.Cast().Where(x=>x.Text!=“PDF”).ToList()
.ForEach(x=>item.DropDownItems.Remove(x));
};
(我似乎没有足够的声誉来添加评论)

我使用了Reza Aghaei提供的建议。然而,reportview的contextmenu还提供了一个导出下拉列表,Reza的建议并未涉及该下拉列表。我禁用了ReportViewer ConcextMenu以解决此问题


ShowContextMenu=false

可能重复的@dlatikay no不起作用如果您谈论的是crystal report组件或microsoft data report designer,则不太清楚。我被贴上了后者的标签,但我可能错了。请让我们知道或至少包括您代码的相关部分。@dlatikay这是c#windows窗体应用程序的报表查看器抱歉,我现在没有任何代码。我正准备在我的项目中使用此工具,他需要数据库中的pdf文件。有什么想法吗?用户需要预览吗?如果没有,您可以不打开报表查看器。是的…您没有得到什么?…第一组代码应该是您的表单loadhere crystalReportViewer1Report.ExportToDisk(ExportFormatType.PortableDocFormat,saveFileDialog.FileName);这是你的电报吗?更多细节?我已经试过了这两种解决方案,没有任何问题。如果您在应用解决方案时遇到问题,请告诉我。。。