0

我创建了一个水晶报表。它工作正常。然后我尝试在 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(); 
}

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

4

1 回答 1

2

只要CrystalReportViewer控件的鼠标点击事件可以序列化为ViewState,绑定到可以序列化的报表类在重新加载页面时会产生一个无法解决的问题:

1 如果报表绑定代码放置在 Not IsPostBack 条件块中,则 ViewState 中的鼠标点击事件会被保留,但报表的绑定不会发生,并抛出异常。

2 如果报表绑定代码放在条件块外,报表绑定正确,但过程中ViewState的内容被压碎,鼠标点击事件丢失。

注意:当在报表中单击 CrystalReportViewer 控件的多个页面时,最常发生这种情况。报告继续,然后神秘地回到第 1 页。

Solution

将绑定代码 CrystalReportViewer 控件放在 Init 事件中

链接:http: //msdn.microsoft.com/fr-fr/library/ms225455%28v=vs.90%29.aspx

于 2012-10-04T09:58:23.267 回答