Отключите опцию экспорта в Excel, когда я создаю отчет через ReportViewer - PullRequest
3 голосов
/ 19 апреля 2010

Как отключить опцию экспорта в Excel при создании отчета через ReportViewer в моем приложении winforms?

Сложение: В частности, я хочу скрыть кнопку панели инструментов, которая относится к задаче вывода / экспорта в Excel, а не ту, которая обрабатывает параметр экспорта в PDF.

Ответы [ 4 ]

4 голосов
/ 22 июня 2013

Это выполнит то, что попросил плакат (использует маленький 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;
        }
    }
2 голосов
/ 28 апреля 2010

Несмотря на то, что на первый взгляд это кажется простым, получить доступ к параметрам экспорта сложно.Вы можете получить панель инструментов средства просмотра отчетов, просто выполнив следующее:

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
1 голос
/ 24 января 2011
//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;
                }
            }
        }
    }
}
0 голосов
/ 19 апреля 2010

Пожалуйста, попробуйте это:

Dim instance As ReportViewer

instance.ShowExportButton = false

НТН

...