Вот что я сделал, чтобы сделать нечто подобное:
Я использовал метод ReportViewer.LocalReport.Render, чтобы отобразить отчет в Excel, PDF и т. Д., И вручную передал его обратно пользователю для загрузки. Чтобы отчет определял, экспортируется ли он, я просто устанавливаю параметр перед экспортом и сбрасываю параметр после экспорта. Примерно так:
reportViewerMain.LocalReport.SetParameters(new ReportParameter("IsExporting", "true"));
byte[] bytes = reportViewerMain.LocalReport.Render("Excel");
reportViewerMain.LocalReport.SetParameters(new ReportParameter("IsExporting", "false"));