最近的项目中,在把水晶报表进行绑定的部分移到某个具体类中时,出现了如下问题:
在数据量达到分页为三页以上后,水晶报表自带的分页功能无效了。
即,第一页、第二页正常,在第二页中点击后一页无法转到第三页。
在最后一页点击上一页就自动跳转到第一页。也就是,水晶报表翻页无效。
在网上搜索一直没有找到相关问题解决方法。
最后只能把原来的在页面中处理的方式移了过来
/// <summary>
/// 设置查看器查询参数
/// </summary>
/// <param name="cryView">查看器,这个变量就在页面中的那个CrystalReportViewer 控件</param>
/// <param name="htParam">参数,说明:使用的是哈希表,键值为水晶报表中的参数名,内容值就是为需要传给水晶报表的参数</param>
/// <returns></returns>
public virtual bool SetReportParam(CrystalDecisions.Web.CrystalReportViewer cryView, System.Collections.Hashtable htParam)
{
// TODO: 添加 AbstractReport.SetReportParam 实现
//查看器控件所需的变量。
if (paramFields==null)
{
paramFields = new ParameterFields ();
}
rangeVal = new ParameterRangeValue ();
// 循环设置参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须和报表中的参数相符。
try
{
for(int i=0;i<RptDoc.ParameterFields.Count;i++)
{
//如此设置参数可以解决翻页只翻二页的问题
paramField = RptDoc.ParameterFields[i];
//获取参数,如果当前参数是否为null,如果不为null,则进行参数设置,(针对有子报表的参数)
object objParam=htParam[paramField.Name.ToLower()];
if(objParam!=null)
this.RptDoc.SetParameterValue(paramField.Name.ToString(),objParam);
//原来的参数设置方式,只能翻二页
// paramField = RptDoc.ParameterFields[i];
// paramField.CurrentValues.Clear();
// object objParam=htParam[paramField.Name.ToLower()];
// if(objParam!=null)
// paramField.CurrentValues.AddValue(objParam);
// paramFields.Add (paramField);
}
// 将参数字段集合放入查看器控件。
// cryView.ParameterFieldInfo = paramFields;
}
catch(Exception ex)
{
string s=ex.Message;
return false;
}
return true;
}
问题解决。