我在ASP.NET中创建了一个带有简单RDLC报告的项目,当我在设计时使用DataSource
绑定报告的SqlDataSource
时,一切正常。但是,如果我删除绑定并尝试从代码中设置DataSource
,那么报告似乎永远不会停止加载。
我以前在WinForms应用程序上使用过这个问题并且没有任何问题,但这是我第一次尝试在ASP.NET中运行它,没有运气。
以下是我用于在DataSource
事件中设置Page_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()
即使我直接在reportviewer控件中设置了报表,也只是将代码切换为......
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("DataSet1", SqlDataSource1))
ReportViewer1.LocalReport.Refresh()
......它仍然是一样的。
此外,在加载报表时,在Visual Studio中,您可以看到正在不断生成大量脚本块(列表框不断增长):
当这种情况发生时,装载微调器正在中途转动,重新启动并重复。该页面没有重新加载。
有什么想法吗?
答案 0 :(得分:7)
好的,就像你发布问题后不久一样,你找到了解决方案。
解决方法是确保仅在页面不是回发时才执行DataSource
的设置。简而言之,将代码块包装在:
If Not Page.IsPostBack Then
<set datasource here>
End If
我想这是因为报告查看器的AJAX特性?如果有人能够解释为什么会出现这种情况,我会有兴趣听到它。