我创建了一个Crystal Report。它工作正常。然后我尝试使用
在Asp.Net中使用它<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"
DisplayGroupTree="False" />
第一次,它工作正常,但当我点击print
按钮时,报告消失并出错。当我将BindReport
方法移出if(!IsPostBack)
时,它就会开始正常工作。
单击打印按钮时出现以下错误:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
BindReport();
}
}
但这很好用
protected void Page_Load(object sender, EventArgs e)
{
BindReport();
}
有人可以帮我理解是什么原因吗?
答案 0 :(得分:2)
只要只将CrystalReportViewer控件的鼠标单击事件序列化为ViewState,绑定到可序列化的报表类会在重新加载页面时产生不可解决的问题:
1如果报表绑定代码放在Not IsPostBack条件块中,则会保留ViewState中的鼠标单击事件,但不会发生报表绑定,并且会引发异常。
2如果报表绑定代码放在条件块之外,则报表绑定正确,但ViewState的内容在此过程中被压缩,鼠标单击事件将丢失。
Nota:在CrystalReportViewer控件的多个页面的报表中进行点击时,最常出现这种情况。然后,报告继续神秘地回到第1页。
Solution
将绑定代码CrystalReportViewer控件放在Init事件
中链接:http://msdn.microsoft.com/fr-fr/library/ms225455%28v=vs.90%29.aspx