我有一个包含Telerik ReportViewer的Silverlight应用程序。我想在代码中选择报告和参数值,并将此信息传递给报告查看器。有谁知道如何做到这一点?我能找到的只是将Report属性设置为报告的名称。
答案 0 :(得分:3)
如果为ReportViewer的RenderBegin事件定义处理程序,则会收到一个RenderBeginEventArgs参数,该参数带有名为ParameterValues的空NameValueDictionary属性。
您可以将{name,value}对添加到此集合中,它们似乎在报告的Parameters集合中完成。
例如,我有两个名为“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属性不会执行任何操作,因为如果您要更改的所有内容都是参数,则每次报告字符串都相同。
我的hacky解决方案是在我想强制更改时设置ReportServiceUri属性。
// No change, just forces the ReportViewer to re-render itself
this.ReportViewer.ReportServiceUri = new Uri("../ReportService.svc", UriKind.RelativeOrAbsolute);
肯定有更好的方法,但这应该让你去。