2010-08-16 247 views
15

我有兴趣在ReportViewer中为我的报告创建自定义导出到Excel选项。这主要是因为我想PDF disalbed而我做了通过:为ReportViewer创建自定义导出到Excel(rdlc)

ReportViewer1.ShowExportControls = false; 

既然没有办法在的ReportViewer禁用任何特定的导出功能(例如PDF但不擅长)。这是我的(稍微)修改后的代码。理想情况下,我希望与之前的导出选项类似,可以将文件保存到我想要的任何位置。

编辑:代码的作品,但我将如何修改文件流,以便让文件不会自动保存我可以提示用户,以便他们可以保存到他们想要的位置?

protected void btnExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    FileStream fs = new FileStream(@"c:\output.xls", 
     FileMode.Create); 
    fs.Write(bytes, 0, bytes.Length); 
    fs.Close(); 

} 

回答

18

我把这个一起基于微软的的ReportViewer和万一有人跑进类似地雷问题的一些谷歌搜索文档:

protected void ExportExcel_Click(object sender, EventArgs e) 
{ 
    Warning[] warnings; 
    string[] streamids; 
    string mimeType; 
    string encoding; 
    string extension; 
    string filename; 

    byte[] bytes = ReportViewer1.LocalReport.Render(
     "Excel", null, out mimeType, out encoding, 
     out extension, 
     out streamids, out warnings); 

    filename = string.Format("{0}.{1}", "ExportToExcel", "xls"); 
    Response.ClearHeaders(); 
    Response.Clear(); 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 
    Response.ContentType = mimeType; 
    Response.BinaryWrite(bytes); 
    Response.Flush(); 
    Response.End(); 
} 
26

刚抬起头...公认的答案会渲染为原始海报请求的XLS文件。

但是,您现在也可以导出到XLSX。您必须将Render()方法的format参数从"Excel"更改为"EXCELOPENXML"

要获得完整的可能值列表,您可以拨打ReportViewer1.LocalReport.ListRenderingExtensions()。当我跑在我的报表查看器实例中我得到了这些可能的选项:

"Excel" "EXCELOPENXML" "IMAGE" "PDF" "WORD" "WORDOPENXML"

我发现它很难确定你需要什么样的传递中的格式。如果你问我,MSDN文档很糟糕。

+1

我搜索了这么久的答案。非常感谢你。 – 2014-04-24 13:12:01

0

如果你想(像你似乎找到了一个自定义的出口有用的,它听起来)隐藏一个导出选项,这里有两种选择:

选项A.使用CSS来隐藏导出选项:

  1. 在浏览器的F12调试窗口中,找到导出的HTML DOM元素,右键单击它并复制唯一的CSS标识符。引用一个不起眼的CSS选择器这样当

    #ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3) 
    { 
        display:none; 
    } 
    

警告的是,因为这是hackish的:

  • 添加到您的CSS文件(用您的剪贴板的情况下更换CSS选择器)。

    选项B.使用代码隐藏隐藏导出选项

    1. 添加下面的方法到您的.aspx。cs文件作为后端代码。

      public void DisableUnwantedExportFormat(ReportViewer ReportViewerID, string strFormatName) 
      { 
          FieldInfo info; 
          foreach (RenderingExtension extension in ReportViewerID.ServerReport.ListRenderingExtensions()) 
          { 
           if (extension.Name == strFormatName) 
           { 
            info = extension.GetType().GetField("m_isVisible", BindingFlags.Instance | BindingFlags.NonPublic); 
            info.SetValue(extension, false); 
           } 
          } 
      } 
      
    2. 选择相关的Reportviewer控件并按F4。

    3. 在属性窗口,单击事件图标,然后双击预渲染项目生成ReportViewer1_PreRender方法,我想你的ReportViewer控件ID是ReportViewer1,编辑方法如下图所示:

      protected void ReportViewer1_PreRender(object sender, EventArgs e) 
      { 
          DisableUnwantedExportFormat((ReportViewer)sender,"Excel"); 
      } 
      

    (来源:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/74dad27b-ef7e-4b9b-8922-666b317b3094/how-to-hide-pdf-in-export-option-in-ssrs-reportviewer?forum=sqlreportingservices,和@ valik的链接唯一的答案。)