【问题标题】:Disable the Excel export option when I generate a report via the ReportViewer通过 ReportViewer 生成报告时禁用 Excel 导出选项
【发布时间】:2011-02-09 19:24:04
【问题描述】:

如何在我的 winforms 应用程序中通过 ReportViewer 生成报告时禁用 Excel 导出选项?

补充: 特别是,我想隐藏引用 Excel 输出/导出任务的工具栏按钮,而不是处理 pdf 导出选项的工具栏按钮。

【问题讨论】:

标签: c# vb.net winforms reporting reportviewer


【解决方案1】:

这将完成发帖人的要求(使用一点 LINQ 从集合中选择特定类型的对象):

    private void DisableReportViewerExportExcel()
    {
        var toolStrip = this.ReportViewer.Controls.Find("toolStrip1", true)[0] as ToolStrip;

        if (toolStrip != null)
            foreach (var dropDownButton in toolStrip.Items.OfType<ToolStripDropDownButton>())
                dropDownButton.DropDownOpened += new EventHandler(dropDownButton_DropDownOpened);
    }

    void dropDownButton_DropDownOpened(object sender, EventArgs e)
    {
        if (sender is ToolStripDropDownButton)
        {
            var ddList = sender as ToolStripDropDownButton;
            foreach (var item in ddList.DropDownItems.OfType<ToolStripDropDownItem>())
                if (item.Text.Contains("Excel"))
                    item.Enabled = false;
        }
    }

【讨论】:

  • 在 win 表单中效果很好。谢谢。
【解决方案2】:

虽然从表面上看这似乎很容易,但导出选项却很难掌握。您只需执行以下操作即可获取报告查看器的工具条:

Dim myToolStrip As ToolStrip = DirectCast(ReportViewer1.Controls.Find("toolStrip1", True)(0), ToolStrip)

...您可以遍历 .Items 集合以使用按钮执行您喜欢的操作,但是导出按钮的 DropDownItems 集合始终显示为空。

因此,简单的解决方案是摆脱默认的导出按钮,并添加您自己的仅包含您需要的功能的按钮。所以在你的表单构造函数中:

//Hide the default export button
ReportViewer1.ShowExportButton = False

//Define a new button
Dim newExportButton As New ToolStripButton("Export PDF", Nothing, AddressOf Me.ExportPDF, "newExport")

//And add it to the toolstrip
DirectCast(ReportViewer1.Controls.Find("toolStrip1", True)(0), ToolStrip).Items.Add(newExportButton)

那么你需要做的就是处理实际的导出:

Private Sub ExportPDF()

    Dim warnings As Microsoft.Reporting.WinForms.Warning()
    Dim streamids As String()
    Dim mimeType As String = ""
    Dim encoding As String = ""
    Dim extension As String = ""

    Dim bytes As Byte() = ReportViewer1.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings)

    Dim fs As New IO.FileStream("C:\export.pdf", IO.FileMode.Create)
    fs.Write(bytes, 0, bytes.Length)
    fs.Close()
    fs.Dispose()

End Sub

【讨论】:

  • 我不知道它是否有效,我会尽快尝试,但你应该被选为我问题的答案。感谢您的努力。
  • 没有问题。如果您遇到问题,请告诉我,因为它对我来说很好用。
【解决方案3】:
//Call This function from Page_Load Event
private void CustomizeRV(System.Web.UI.Control reportControl)
{
    foreach (System.Web.UI.Control childControl in reportControl.Controls)
    {
        if (childControl.GetType() == typeof(System.Web.UI.WebControls.DropDownList)) 
        { 
            System.Web.UI.WebControls.DropDownList ddList = (System.Web.UI.WebControls.DropDownList)childControl;
            ddList.PreRender += new EventHandler(ddList_PreRender); 
        }
        if (childControl.Controls.Count > 0) 
        { 
            CustomizeRV(childControl); 
        } 
    }
}

//Dropdown prerender event
//You can hide any option from ReportViewer( Excel,PDF,Image )   
void ddList_PreRender(object sender, EventArgs e)
{
    if (sender.GetType() == typeof(System.Web.UI.WebControls.DropDownList))
    {
        System.Web.UI.WebControls.DropDownList ddList = (System.Web.UI.WebControls.DropDownList)sender; 
        System.Web.UI.WebControls.ListItemCollection listItems = ddList.Items;

        if ((listItems != null) && (listItems.Count > 0) && (listItems.FindByText("Excel") != null))
        {
            foreach (System.Web.UI.WebControls.ListItem list in listItems)
            {
                if (list.Text.Equals("Excel"))
                {
                    list.Enabled = false;
                }
            }
        }
    }
}

【讨论】:

  • 问题是针对 Windows 窗体报告查看器,而不是网络
【解决方案4】:

请试试这个:

Dim instance As ReportViewer

instance.ShowExportButton = false

HTH

【讨论】:

  • 感谢您的回复。但是,此代码将禁用 Excel 和“pdf”导出。我希望能够只导出 pdf 文件。我想隐藏引用 Excel 导出的按钮,而不是使用 pdf 选项的按钮...
  • 是的。此代码将禁用 Excel 和 Pdf 导出。但是当他/她点击打印按钮时,用户可以从打印窗口中选择一个pdf创建者。
猜你喜欢
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多