Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ReportViewer生成报告时禁用Excel导出选项_C#_Vb.net_Winforms_Reporting_Reportviewer - Fatal编程技术网

C# 通过ReportViewer生成报告时禁用Excel导出选项

C# 通过ReportViewer生成报告时禁用Excel导出选项,c#,vb.net,winforms,reporting,reportviewer,C#,Vb.net,Winforms,Reporting,Reportviewer,在winforms应用程序中通过ReportViewer生成报告时,如何禁用Excel导出选项 添加: 特别是,我想隐藏指向Excel输出/导出任务的工具栏按钮,而不是。处理pdf导出选项的工具栏按钮。请尝试以下操作: Dim instance As ReportViewer instance.ShowExportButton = false HTH虽然表面上看这似乎很容易,但出口选项很难掌握。只需执行以下操作,即可获得reportviewer的toolstrip: Dim myToolSt

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

添加: 特别是,我想隐藏指向Excel输出/导出任务的工具栏按钮,而不是。处理pdf导出选项的工具栏按钮。

请尝试以下操作:

Dim instance As ReportViewer

instance.ShowExportButton = false

HTH

虽然表面上看这似乎很容易,但出口选项很难掌握。只需执行以下操作,即可获得reportviewer的toolstrip:

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

这将完成海报要求的内容(使用一点LINQ从集合中选择特定类型的对象):

private void DisableReportViewerExportExcel()
{
var toolStrip=this.ReportViewer.Controls.Find(“toolStrip1”,true)[0]作为toolStrip;
如果(toolStrip!=null)
foreach(toolStrip.Items.OfType()中的var dropDownButton)
dropDownButton.DropDownOpened+=新事件处理程序(dropDownButton\u DropDownOpened);
}
void dropDownButton_dropDownOpen(对象发送方,事件参数e)
{
if(发送方为ToolStripDropDownButton)
{
var ddList=发送方作为ToolStripDropDownButton;
foreach(ddList.DropDownItems.OfType()中的变量项)
if(item.Text.Contains(“Excel”))
item.Enabled=false;
}
}

感谢您的回复。但是,此代码将禁用Excel和“pdf”导出。我希望能够只导出pdf文件。我想隐藏引用Excel导出的按钮,而不是使用pdf选项的按钮…是的。此代码将禁用Excel和Pdf导出。但当用户点击打印按钮时,他/她可以从打印窗口选择一个pdf创建者。我不知道它是否有效,我很快会尝试,但你应该被选为我问题的答案。谢谢你的努力,没问题。如果您有问题,请告诉我,因为它在这里对我很好。我发现另一个问题很有用:这个问题是针对windows窗体报表查看器的,而不是win窗体中的webWorks。非常感谢。
//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;
                }
            }
        }
    }
}
    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;
        }
    }