reportviewer.LocalReport.GetTotalPages()返回0或错误

时间:2012-06-04 20:35:11

标签: c# asp.net custom-controls reportviewer report-viewer2010

我正在使用用户控件,并添加了我的报表查看器和自定义工具栏。我想为它创建一个自定义导航,但由于某些原因,当我想检查总页数以决定是否显示导航按钮时,它返回0或“此表达式导致副作用,将不会被评估”误差..

我已经没想完了,也不太确定从哪里开始......

<rsweb:reportviewer 
ID="rvReports" 
runat="server" ShowToolBar="False"
SizeToReportContent="True" AsyncRendering="false" />

代码隐藏:

rds = new Microsoft.Reporting.WebForms.ReportDataSource("dsName", myclasstoload());     
rvReports.LocalReport.DataSources.Add(rds);
rvReports.PageCountMode = PageCountMode.Actual;
rvReports.LocalReport.Refresh();
rvReports.DataBind();


if (rvReports.LocalReport.GetTotalPages() > 1)
{
 liFirst.Visible = true;
 liPrevious.Visible = true;
 liNext.Visible = true;
 liLast.Visible = true;
}

这就是我的usercontrol(.ascx)中的databind事件。任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:1)

msdn question可能是您的答案,在报告呈现之后才能调用GetTotalPages()方法。相关引用:

  

报表服务器在呈现报表的第一页之前不会计算总页数。在ASP.Net事件PreRender之前,ReportViewer不会请求从服务器进行页面呈现。如果在触发ReportViewer.PreRender事件后将GetTotalPages调用移动到某个点,则应该获得所需的行为。

另请参阅ASP.NET Page Lifecycle以供参考。

答案 1 :(得分:0)

为了获取这些页面,我必须以pdf格式呈现报告,然后使用Itextsharp库中的pdfreader类来获取总页数

var bytes=viewer.Render("PDF");
PdfReader reader = new PdfReader(bytes);
var pageCount = reader.NumberOfPages

如果你想以pdf格式呈现你的rdlc

,这很有效