在运行时将参数传递给晶体报告不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在运行时将参数传递给晶体报告不起作用相关的知识,希望对你有一定的参考价值。
我一整天都试图解决这个问题,但无法使其发挥作用。我有一个水晶报告,我想在运行时传递参数但仍然继续提示参数。以下是我的代码:
public void LoadReport()
{
string studenNo = "A170034511";
ReportDocument cryRpt = new ReportDocument();
string reportName = "StdReport";
cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));
ParameterFields parameterFields = new ParameterFields();
//First Parameter
var parameterField1 = new ParameterField();
var parameterDiscreteValue1 = new ParameterDiscreteValue();
parameterField1.ParameterFieldName = "StudentNo";
parameterDiscreteValue1.Value = studenNo;
parameterField1.CurrentValues.Add(parameterDiscreteValue1);
parameterFields.Add(parameterField1);
//second Parameter
var parameterField2 = new ParameterField();
var parameterDiscreteValue2 = new ParameterDiscreteValue();
parameterField2.ParameterFieldName = "Year";
parameterDiscreteValue2.Value = "2017";
parameterField2.CurrentValues.Add(parameterDiscreteValue2);
parameterFields.Add(parameterField2);
rptViewer.ParameterFieldInfo = parameterFields;
rptViewer.ReportSource = cryRpt;
rptViewer.RefreshReport();
}
有了这些参数窗口仍然显示。我究竟做错了什么。
答案
我到处寻找解决我的问题但没有任何帮助。经过多次尝试,我能够解决问题。以下是我的发现:
- 不要调用CrystalReportViewer.RefreshReport()。这会刷新报告并导致报告清除已传递的所有参数。
- 加载报告后调用Crystal Report.Refresh()
- 设置CrystalReportViewer报告源后添加参数。
以下是适用于我的整个项目的最终代码,包含100多个报告:
public void LoadReport()
{
string studenNo = "A170034511";
ReportDocument cryRpt = new ReportDocument();
string reportName = "StdReport";
cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));
cryRpt.Refresh();
rptViewer.ReportSource = cryRpt;
ParameterFields parameterFields = new ParameterFields();
//First Parameter
var parameterField1 = new ParameterField();
var parameterDiscreteValue1 = new ParameterDiscreteValue();
parameterField1.ParameterFieldName = "StudentNo";
parameterDiscreteValue1.Value = studenNo;
parameterField1.CurrentValues.Add(parameterDiscreteValue1);
parameterFields.Add(parameterField1);
//second Parameter
var parameterField2 = new ParameterField();
var parameterDiscreteValue2 = new ParameterDiscreteValue();
parameterField2.ParameterFieldName = "Year";
parameterDiscreteValue2.Value = "2017";
parameterField2.CurrentValues.Add(parameterDiscreteValue2);
parameterFields.Add(parameterField2);
rptViewer.ParameterFieldInfo = parameterFields;
rptViewer.HasCrystalLogo = false;
rptViewer.Zoom(100);
}
我希望这能帮助很多人和我一样有同样的问题。如果有帮助,请记得投票给答案。
以上是关于在运行时将参数传递给晶体报告不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用
从 boost 线程在主线程上运行一个函数并将参数传递给该函数