触发报告查看器';s的ToolBar函数

本文关键字:ToolBar 函数 报告 | 更新日期: 2023-09-27 18:25:02

是否可以通过单击按钮(或除reportViewer提供的控件之外的任何其他控件)触发导出到Excel/PDF/Word。我通过PerformClick成功触发了Print和PrintLayout,但它不适用于导出(它是reportViewers ToolBar中的第15个索引,但当我尝试使用export时,什么都没有发生)。这是因为导出是DropDownButton吗?在这种情况下,我将如何访问它的项目(我在工具栏中按名称和索引号列出了每个项目,Export DropDownButton列出了,但它的项目没有)。

感谢

触发报告查看器';s的ToolBar函数

我也有同样的问题。你能发布一些代码吗?这样我就可以看到如何访问工具栏以及"打印"answers"打印预览"按钮了?也许看了之后,我也能弄清楚其他的。

如果您可以从VB.NET 转换,以下帖子的公认解决方案可能会对您有所帮助

以编程方式触发ReportViewer Toolbar控件

要访问工具栏,您需要像您发布的问题中那样的FindToolbar函数。这是该函数的C#版本:

private T FindToolStrip<T>(Control control) where T : System.Windows.Forms.Control
    {
        if (control == null)
        {
            return null;
        }
        else if (control is T)
        {
            return (T)control;
        }
        else
        {
            T result = null;
            foreach (Control embedded in control.Controls)
            {
                if (result == null)
                {
                    result = FindToolStrip<T>(embedded);
                }
            }
            return result;
        }
    }

之后,你创建了一个按钮控件(或任何其他你想要的),并在其中添加以下代码:

            ToolStrip ts = new ToolStrip();
            ts = FindToolStrip<ToolStrip>(this.reportViewer1);
            ts.Items[13].PerformClick();

项目13是打印预览,您可以通过循环浏览reportViewers ToolStrip并写出项目的名称(总共有21个,但其中一些是分隔符或标签)来获得它上所有按钮的索引。您可以使用此代码来触发其中的任何一个(除了Export,我认为这与Export是一个下拉按钮而不是普通按钮有关)。如果您感兴趣,这是将显示的报告导出到.xls文件的代码:

            Warning[] warnings;
            string[] streamids;
            string mimeType;
            string encoding;
            string extension;
            string path = " ";
            DialogResult dr= saveFileDialog1.ShowDialog();
            path = saveFileDialog1.FileName;              
            byte[] bytes = reportViewer1.LocalReport.Render("Excel", null, out mimeType, out encoding, out extension, out streamids, out warnings);
            FileStream fs = new FileStream(path + ".xls", FileMode.Create);
            fs.Write(bytes, 0, bytes.Length);
            fs.Close();

同样,您可以将其放入button_Click方法或类似方法中。我还没有尝试过其他扩展(.pdf或.doc),但我认为它应该可以正常工作。您需要将要保存的文件的扩展名添加到路径字符串中,否则将无法打开创建的文件。我希望这能帮助你解决问题。