为什么需要重新绑定Crystal Report

时间:2012-10-04 09:48:22

标签: c# asp.net crystal-reports

我创建了一个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(); 
}

有人可以帮我理解是什么原因吗?

1 个答案:

答案 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