Я могу помочь.
Проблема в том, что элемент управления ReportViewer использует Session для хранения текущего выполняемого отчета. После перехода от отчетов этот элемент все еще остается и в конечном итоге теряет свой «контекст выполнения», что позволяет серверу отчетов кэшировать отчеты.
Поэтому перед просмотром отчета вы должны попытаться очистить сеанс этих отчетов, чтобы в сеансе НЕТ кэшированных отчетов, и элемент управления ReportViewer мог работать правильно.
Вы также обнаружите, что иногда при доступе к Session.Keys.Count эта ошибка может возникать, так как опять контекст выполнения не удался.
Убедитесь, что вы делаете это на странице с отчетом !!
2 варианта:
if (!IsPostBack)
{
HttpContext.Current.Session.Clear();
ReportViewer1.ServerReport.ReportServerUrl = new Uri(ReportServerUrl, System.UriKind.Absolute);
ReportViewer1.ServerReport.ReportPath = ReportPath;
System.Collections.Generic.List<ReportParameter> parameters = new System.Collections.Generic.List<ReportParameter>();
....
ReportViewer1.ServerReport.SetParameters(parameters);
ReportViewer1.ServerReport.Refresh();
}
Или
for (int i = 0; i < HttpContext.Current.Session.Keys.Count; )
{
if (HttpContext.Current.Session[i].ToString() == "Microsoft.Reporting.WebForms.ReportHierarchy")
HttpContext.Current.Session.RemoveAt(i);
else
i++;
}