ReportViewer 2010不从代码加载数据源

Ira*_*ney 4 asp.net reportviewer rdlc reporting-services

我在ASP.NET中创建了一个带有简单RDLC报告的项目,当我DataSource在设计时使用SqlDataSource一切工具绑定报表时,一切正常.但是,如果我删除绑定并尝试设置DataSourcefrom代码,那么报告似乎永远不会停止加载.

我以前在WinForms应用程序上使用过这个并没有问题,但这是我第一次尝试在ASP.NET中做到这一点,没有运气.

下面是我使用的设置代码DataSourcePage_Load事件.正如我所说,使用相同的SqlDataSource,如果它绑定在.aspx页面中.

ReportViewer1.Reset()
ReportViewer1.ProcessingMode = ProcessingMode.Local
ReportViewer1.LocalReport.ReportPath = Server.MapPath("Report.rdlc")
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", SqlDataSource1))
ReportViewer1.LocalReport.Refresh()
Run Code Online (Sandbox Code Playgroud)

即使我直接在reportviewer控件中设置了报表,也只是将代码切换为...

ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", SqlDataSource1))
ReportViewer1.LocalReport.Refresh()
Run Code Online (Sandbox Code Playgroud)

......它仍然是一样的.

此外,在加载报表时,在Visual Studio中,您可以看到不断生成大量脚本块(列表框不断增长):

视觉工作室

在这种情况下,加载微调器正在中途转动,重新启动并重复.该页面没有重新加载.

有什么想法吗?

Ira*_*ney 7

好的,就像你发布问题后不久一样,你找到了解决方案.

对此的解决方案是确保DataSource仅在页面不是回发时才执行设置.简而言之,将代码块包装在:

If Not Page.IsPostBack Then

    <set datasource here>

End If
Run Code Online (Sandbox Code Playgroud)

我想这是因为reportviewer的AJAX性质?如果有人能说清楚为什么会这样,我有兴趣听到它.

  • 正确 - 触发更新的页面加载事件中的任何内容都会再次通过加载返回并导致无限循环.更多信息:http://blogs.msdn.com/b/brianhartman/archive/2010/03/21/reports-never-stop-loading-with-vs-2010.aspx (4认同)
  • @Ennael - 谢谢你.准确解释问题的绝佳链接. (2认同)