我有兴趣为ReportViewer中的报表创建自定义“导出到Excel”选项。这主要是因为我想要pdf被剥夺,我通过以下方式做到了:
ReportViewer1.ShowExportControls = false;
由于无法在ReportViewer中禁用任何特定的导出功能(例如pdf但不是excel)。这是我(稍微)修改后的代码。理想情况下,我想要一些类似于以前的导出选项,我可以将文件保存到我想要的任何位置。
编辑:代码有效,但我如何修改文件流,以便不会自动保存文件,我可以提示用户,以便他们可以保存到他们想要的任何位置?
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();
}
答案 0 :(得分:30)
只是抬头......接受的答案将呈现为XLS文件,这是原始海报所要求的。
但是,您现在也可以导出到XLSX。您必须将format
方法的"Excel"
参数从"EXCELOPENXML"
更改为"Excel"
。
要获取可能值的完整列表,您可以调用Render()
。当我在报表查看器实例上运行它时,我得到了以下可能的选项:
"EXCELOPENXML"
"IMAGE"
"PDF"
"WORD"
"WORDOPENXML"
{{1}}
我发现很难确定你需要为格式传递什么。如果你问我,MSDN会很难记录这个。
答案 1 :(得分:19)
我根据微软关于ReportViewer和Google搜索的文档将这些内容整合在一起,以防有人遇到与我类似的问题:
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();
}
答案 2 :(得分:1)
如果你想隐藏一个导出选项(虽然听起来好像你发现自定义导出有用),这里有两个选项:
选项A.使用CSS隐藏导出选项:
将此项添加到CSS文件中(将CSS选择器替换为剪贴板的上下文):
#ReportViewer1_ctl05_ctl04_ctl00_Menu > div:nth-child(3)
{
display:none;
}
在引用这样一个模糊的CSS选择器时,建议小心,因为这是hackish。
选项B.使用代码隐藏来隐藏导出选项
将以下方法作为后端代码添加到.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);
}
}
}
选择相关的Reportviewer控件并按F4。
在“属性”窗口中,单击“事件”图标,然后双击PreRender项以生成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的链接仅回答。)
答案 3 :(得分:0)
有一种方法可以在报告查看器中禁用特定导出。见下文。
Step 1: Add OnPreRender event for the report viewer
Step 2: Inside the ReportViewer_PreRender function add the following code
DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "PDF"); // Disables PDF
DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "WORDOPENXML"); //Disables Word
DisableReportExportType.HideUnwantedExportFormat((ReportViewer)sender, "EXCELOPENXML"); //Disables Excel
根据需要使用上述内容。希望这是您正在寻找的内容。