【发布时间】:2011-04-14 13:58:21
【问题描述】:
我有一个 Silverlight 应用程序,其中包含 Telerik ReportViewer。我想在代码中选择一个报表和参数值并将此信息传递给报表查看器。有谁知道如何做到这一点?我所能找到的只是将 Report 属性设置为报告的名称。
【问题讨论】:
标签: silverlight parameters telerik reportviewer
我有一个 Silverlight 应用程序,其中包含 Telerik ReportViewer。我想在代码中选择一个报表和参数值并将此信息传递给报表查看器。有谁知道如何做到这一点?我所能找到的只是将 Report 属性设置为报告的名称。
【问题讨论】:
标签: silverlight parameters telerik reportviewer
如果您为 ReportViewer 的 RenderBegin 事件定义了一个处理程序,您将收到一个带有名为 ParameterValues 的空 NameValueDictionary 属性的 RenderBeginEventArgs 参数。
您可以将 {name, value} 对添加到此集合中,它们似乎在报告的参数集合中完成。
例如,我有两个名为“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);
肯定有更好的方法,但这应该能让你继续前进。
【讨论】: