Меня интересует создание настраиваемой опции экспорта в Excel для моего отчета в ReportViewer. В основном это связано с тем, что я хочу отключить PDF-файл, и я сделал это с помощью:
ReportViewer1.ShowExportControls = false;
Поскольку в ReportViewer нет возможности отключить какие-либо определенные функции экспорта (например, PDF, но не Excel). Вот мой (слегка) измененный код ниже. В идеале я хотел бы что-то похожее на предыдущие параметры экспорта, где я могу сохранить файл в любом месте, которое захочу.
РЕДАКТИРОВАТЬ: Код работает, но как мне изменить Filestream, чтобы вместо автоматического сохранения файла я мог предложить пользователю сохранить его в любом месте, которое пожелает?
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();
}
Я собрал это на основе документации Microsoft по 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();
}