Если вы определяете обработчик для события RenderBegin ReportViewer, вы получаете параметр RenderBeginEventArgs с пустым свойством NameValueDictionary с именем ParameterValues.
Вы можете добавить пары {имя, значение} в эту коллекцию, и они, похоже, попали в коллекцию параметров отчета.
Например, у меня есть два параметра отчета с именами «InputElementID» и «ReportPeriod». Мой обработчик RenderBegin выглядит примерно так:
private void ReportViewer_RenderBegin(object sender, Telerik.ReportViewer.Silverlight.RenderBeginEventArgs args)
{
args.ParameterValues.Add("InputElementID", this.elementId);
args.ParameterValues.Add("ReportPeriod", "fortnight");
}
Но это поднимет еще одну проблему: как вы можете сделать так, чтобы отчет повторно отображал себя с новыми параметрами в ответ на взаимодействие с пользователем? Например, в моем случае у меня была настроена страница с основными данными, с RadTreeListView слева и моим ReportViewer справа. Мне нужно было заставить мой ReportViewer пересчитывать себя каждый раз при изменении выбранного элемента.
ReportViewer не имеет методов для принудительного повторного рендеринга. И установка его свойства Report ничего не делает, так как строка Report будет одинаковой каждый раз, если все, что вы изменяете, это параметр.
Моим хакерским решением было установить свойство ReportServiceUri, когда я хотел форсировать изменение.
// No change, just forces the ReportViewer to re-render itself
this.ReportViewer.ReportServiceUri = new Uri("../ReportService.svc", UriKind.RelativeOrAbsolute);
Наверное, должен быть лучший путь, но это должно помочь вам.