代码之家  ›  专栏  ›  技术社区  ›  Lubbock

将ReportViewer限制为仅允许保存PDF

  •  1
  • Lubbock  · 技术社区  · 6 年前

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

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

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

    3 回复  |  直到 6 年前
        1
  •  1
  •   Peter B    6 年前

    首先,可以使用 ShowExportControls 所有物

    然后,您将向toolstrip添加一个自定义按钮。这将在您的 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);;
        }
    }
    
        2
  •  1
  •   Reza Aghaei    6 年前

    更改 ToolStrip 外观仅显示保存按钮而不显示下拉列表,您可以找到 工具栏 ReportViewer

    要显示仅允许保存PDF的保存对话框,请附加事件处理程序以单击“导出”按钮的事件,并使用显示保存对话框 ExportDialog 报告查看器的方法。您可以在返回的扩展之间找到PDF扩展 ListRenderingExtensions() 的方法 LocalReport 并将其传递给 导出对话框 方法将对话框限制为仅显示 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
  •  -1
  •   Marko    6 年前

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

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

    ShowContextMenu=false